mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 07:53:49 +08:00
Add basic Persona functionality
1. No session integration yet, so automatic login/logout events are suppressed. 2. Popup blockers must be disabled: submits form to target="_blank"
This commit is contained in:
@ -21,6 +21,8 @@ class Users::OmniauthCallbacksController < ApplicationController
|
||||
create_or_sign_on_user_using_openid(auth_token)
|
||||
when "github"
|
||||
create_or_sign_on_user_using_github(auth_token)
|
||||
when "persona"
|
||||
create_or_sign_on_user_using_persona(auth_token)
|
||||
end
|
||||
end
|
||||
|
||||
@ -169,6 +171,7 @@ class Users::OmniauthCallbacksController < ApplicationController
|
||||
openid_url: identity_url
|
||||
}
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def create_or_sign_on_user_using_github(auth_token)
|
||||
@ -200,6 +203,37 @@ class Users::OmniauthCallbacksController < ApplicationController
|
||||
else
|
||||
@data[:name] = screen_name
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def create_or_sign_on_user_using_persona(auth_token)
|
||||
|
||||
email = auth_token[:info][:email]
|
||||
|
||||
user = User.find_by_email(email)
|
||||
|
||||
if user
|
||||
if SiteSetting.must_approve_users? and !user.approved?
|
||||
@data = {awaiting_approval: true}
|
||||
else
|
||||
log_on_user(user)
|
||||
@data = {authenticated: true}
|
||||
end
|
||||
else
|
||||
@data = {
|
||||
email: email,
|
||||
email_valid: true,
|
||||
name: User.suggest_name(email),
|
||||
username: User.suggest_username(email),
|
||||
auth_provider: params[:provider].try(:capitalize)
|
||||
}
|
||||
|
||||
session[:authentication] = {
|
||||
email: email,
|
||||
email_valid: true,
|
||||
}
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
Reference in New Issue
Block a user