discourse/lib/auth/github_authenticator.rb

48 lines
1 KiB
Ruby

class Auth::GithubAuthenticator < Auth::Authenticator
def name
"github"
end
def after_authenticate(auth_token)
result = Auth::Result.new
data = auth_token[:info]
result.username = screen_name = data["nickname"]
result.email = email = data["email"]
github_user_id = auth_token["uid"]
result.extra_data = {
github_user_id: github_user_id,
github_screen_name: screen_name,
}
user_info = GithubUserInfo.where(github_user_id: github_user_id).first
if user_info
user = user_info.user
elsif user = User.find_by_email(email)
user_info = GithubUserInfo.create(
user_id: user.id,
screen_name: screen_name,
github_user_id: github_user_id
)
end
result.user = user
result.email_valid = true
result
end
def after_create_account(user, auth)
data = auth[:extra_data]
GithubUserInfo.create(
user_id: user.id,
screen_name: data[:github_screen_name],
github_user_id: data[:github_user_id]
)
end
end