2

omn​​iauth-facebook でのサインインに関する Ryan のキャストをフォローしましたが、サインインはうまく機能します。

私が抱えている問題は、サインインしたままです。現在、ブラウザー ウィンドウを閉じるまでサインインしています。ブラウザを再度開いて Web サイトに戻ると、サインアウトしています。他のマシンや他の Facebook アカウントの他の人にも同じことが言えます。

私はセッションと Facebook 認証の仕組みにあまり詳しくないので、何がうまくいかないのかを正確に分析するのは困難です。

何が起こっているのか知っている方もいらっしゃるのではないでしょうか?前もって感謝します!

私のコード:

アプリケーションコントローラー:

def current_user
  @current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user

セッションコントローラー:

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

ユーザー.rb:

def self.from_omniauth(auth)
  where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
    user.provider = auth.provider
    user.uid = auth.uid
    user.name = auth.info.name
    user.email = auth.info.email
    user.pic_url = auth.info.image
    user.oauth_token = auth.credentials.token
    user.oauth_expires_at = Time.at(auth.credentials.expires_at)
    user.save!
  end
end

omn​​iauth.rb:

OmniAuth.config.logger = Rails.logger

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, CONFIG[:facebook_app_id], CONFIG[:facebook_app_secret], scope 'email', display: 'popup'
end
4

2 に答える 2

1

それはDevise wikiでまっすぐです

サインアップ時SessionsController

remember_me(user)

:rememberableユーザーモデルでDeviseオプションとして渡されていることを確認してください。

補足 - かなり時代遅れのフローを使用していると思いますが、現在推奨されている解決策は、OmniauthCallbacksController私が思うに.

于 2013-07-15T14:14:16.643 に答える
1

ここで問題になるのは、ブラウザを閉じるとセッションが期限切れになることです。

ユーザーの署名にdevise gemを使用できないのはなぜですか。

User テーブルに devise gem を使用すると、「Remeber Me」というオプションが表示されます。ユーザーがログインしているときに、このフラグを true に設定できます。

デバイスの詳細については、https://github.com/plataformatec/deviseを参照してください。

これで問題が解決する場合があります。

于 2013-07-15T09:44:16.100 に答える