mirror of
https://github.com/discourse/discourse.git
synced 2024-11-24 21:50:24 +08:00
39 lines
969 B
Ruby
39 lines
969 B
Ruby
class Auth::OpenIdAuthenticator < Auth::Authenticator
|
|
|
|
def initialize(name, opts = {})
|
|
@name = name
|
|
@opts = opts
|
|
end
|
|
|
|
def name
|
|
@name
|
|
end
|
|
|
|
def after_authenticate(auth_token)
|
|
|
|
result = Auth::Result.new
|
|
|
|
data = auth_token[:info]
|
|
identity_url = auth_token[:extra][:identity_url]
|
|
result.email = email = data[:email]
|
|
|
|
# If the auth supplies a name / username, use those. Otherwise start with email.
|
|
result.name = name = data[:name] || data[:email]
|
|
result.username = username = data[:nickname] || data[:email]
|
|
|
|
user_open_id = UserOpenId.find_by_url(identity_url)
|
|
|
|
if !user_open_id && @opts[:trusted] && user = User.find_by_email(email)
|
|
user_open_id = UserOpenId.create(url: identity_url , user_id: user.id, email: email, active: true)
|
|
end
|
|
|
|
result.user = user_open_id.try(:user)
|
|
result.extra_data = {
|
|
openid_url: identity_url
|
|
}
|
|
result.email_valid = @opts[:trusted]
|
|
|
|
result
|
|
end
|
|
end
|