2013-07-15 86 views
2

我已經關注Ryan's cast on signing in with omniauth-facebook並且簽到的作品很棒。not staying with omniauth-facebook

我遇到的問題是保持登錄狀態。現在我已登錄,直到關閉瀏覽器窗口。如果我再次打開瀏覽器並返回到我的網站,我已退出。其他機器和其他Facebook帳戶上的其他人也一樣。

我對會話和Facebook身份驗證的工作不太熟悉,因此我很難分析究竟發生了什麼問題。

也許你們中的一些人知道發生了什麼事?提前致謝!

我的代碼:

application_controller:

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

sessions_controller:

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

user.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 

omniauth.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 

回答

1

It's straight in the Devise wiki

上註冊

SessionsController

remember_me(user) 

,並確保有:rememberable爲您的用戶模型設計選項傳遞。

附註 - 我想你使用較爲陳舊的流動,現在鼓勵解決方案是OmniauthCallbacksController,我認爲。

1

可能是這裏的問題是,當你關閉瀏覽器會話過期得到。

爲什麼不能使用devise gem來簽署用戶。

如果您使用的設計爲您的用戶表的寶石,你會得到所謂的「記着我」的選項,當用戶的loggedIn你可以設置該標誌爲真。

有關制訂更多信息請參閱 - https://github.com/plataformatec/devise

這樣可以解決您的問題。

+0

感謝您的建議NaveenKumar。我寧願不使用比絕對需要更多的寶石和代碼,這應該能夠在沒有設備的情況下工作。 – Reinier