Devise + Omniauth + remember_me

5

关于如何在Omniauth中启用“记住我”,似乎存在一些混淆。

根据这个wiki,您需要在OmniauthCallbacksController中添加以下内容:

remember_me(user)

另一方面,根据这个问题,你只需要这样做:issue
user.remember_me = true

另外,根据这里的建议,使 remember_me 默认为 true,您只需将以下内容添加到您的 User.rb 文件中即可。
def remember_me
  true
end

我不确定哪一个是正式答案,而且这三个都没有对我起作用。它只在 Mac 上的 Chrome 中有效,但在 Firefox Mac 和 Windows 的 Chrome 中无效。不确定发生了什么。

我的代码如下:

# -*- 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个回答

3

这个问题在这里Jose Valim回答了。

第一个选项是正确的。其他两个选项只是将字段的默认值设置为true,这意味着每当调用第一个选项时,它都会自动被记住。

如果它在某些浏览器中工作或不工作,则很可能是浏览器问题,因为服务器肯定会发送正确的cookie。尝试确认cookie是否正确,并找出浏览器是否正确存储它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接