2

我已经关注Ryan 的演员阵容,使用omniauth-facebook登录,并且登录效果很好。

我遇到的问题是保持登录状态。现在我已经登录,直到我关闭浏览器窗口。如果我再次打开浏览器并返回我的网站,我将退出。其他机器和其他 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 gem 为用户签名。

如果您对 User 表使用 devise gem,您将获得一个名为“Remeber Me”的选项,您可以在用户登录时将此标志设置为 true。

有关设计的更多信息,请参阅 - https://github.com/plataformatec/devise

这可能会解决您的问题。

于 2013-07-15T09:44:16.100 回答
1

直接在 Devise wiki

在注册SessionsController

remember_me(user)

并确保:rememberable在您的用户模型中作为设计选项通过。

旁注 - 我认为您使用了相当过时的流程,现在鼓励的解决方案是让OmniauthCallbacksController我认为。

于 2013-07-15T14:14:16.643 回答