设计+ Omniauth + remember_me

时间:2014-08-17 02:58:37

标签: devise omniauth remember-me

对于如何记住我使用Omniauth似乎有些困惑。

根据此wiki,您需要在OmniauthCallbacksController中包含以下内容:

remember_me(user)

另一方面,根据这个issue,你只需要这样做:

user.remember_me = true

此外,根据this将remember_me默认设置为true,您只需将以下内容添加到User.rb

def remember_me
  true
end

不确定哪一个是正式答案,而且这三个对我都不起作用。它仅适用于Mac上的Chrome,但不适用于Firefox Mac& Chrome Windows。不知道发生了什么。

我的代码如下所示:

# -*- encoding : utf-8 -*-
class OmniauthCallbacksController < Devise::OmniauthCallbacksController

    include Devise::Controllers::Rememberable

    def all
        omniauth = request.env["omniauth.auth"]
        auth = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])
        if auth

            auth.update_with_omniauth omniauth
            auth.save!

            # ???
            remember_me auth.user
            auth.user.remember_me = true

            if user_signed_in?
                redirect_back_or settings_path(current_user)
            else
                sign_in_and_redirect auth.user, event: :authentication
            end
        else
            if user_signed_in?
                current_user.build_auth(omniauth).save!
                redirect_back_or settings_path(current_user)
            else
                session["devise.omniauth"] = omniauth.except('extra')
                redirect_to new_user_registration_url
            end
        end
    end

    alias_method :facebook, :all
    alias_method :twitter, :all

end

1 个答案:

答案 0 :(得分:2)

here已回答Jose Valim

  

第一个选项是正确的。另外两个简单地设置了   字段的默认值为true,表示它将是   每当第一个被呼叫时自动记住。

     

如果它在某些浏览器中有效,则可能是浏览器问题   因为服务器肯定发送了正确的cookie。尝试   确认cookie是否确实正确并找出浏览器是否正确   正确存储它。