3

如果我使用omniauth进行推特验证..以下代码是

def create
    user = User.from_omniauth(env["omniauth.auth"])
    session[:user_id] = user.id
    redirect_to root_url, notice: "Successfully signed in"
end

但如果我使用omniauth+devise 进行twitter 验证.. 以下代码是

def twitter
    omni= request.env["omniauth.auth"]
authentication = Authentication.find_by_provider_and_uid(omni['provider'],omni['uid'])
if authentication
    flash[:notice]="Logged in successfully"
    sign_in_and_redirect User.find(authentication.user_id)
elsif current_user
    token=omni['credentials'].token
    token_secret=omni['credentials'].secret
    current_user.authentications.create! (:provider=>omni['provider'],:uid=>omni['uid'],:token=>token,:token_secret=>token_secret)
    flash[:notice]="Authentication successful."
    sign_in_and_redirect current_user
else
    user=User.new
    user.apply_omniauth(omni)
        if user.save
        flash[:notice]="Logged in."
        sign_in_and_redirect User.find(user.id)
    else
        session[:omniauth]=omni.except('extra')
        redirect_to new_user_registration_path
    end 
end
end

Omniauth 或 Omniauth+Devise 哪个更好?

4

1 回答 1

2

Devise将为您提供某些现成的辅助功能current_useruser_signed_in?例如before :authenticate_user!.

虽然它们对于我们自己实现是非常基本的,但是当omniauth-twitter您单独实现时,您将不得不自己实现。

如果您不打算进行非常复杂的用户身份验证,而只想进行简单的基于 Twitter 的身份验证,则可以继续omniauth-twitter单独使用。默认情况下,Devise 将打开您的手动(基于表单)注册的应用程序,您可能不希望这样做。

于 2013-05-20T07:10:23.820 回答