Devise + Omniauth + Remember_me

JPN*_*JPN 5 remember-me devise omniauth

对于如何记住我与 Omniauth 的合作似乎有些混乱。

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

remember_me(user)
Run Code Online (Sandbox Code Playgroud)

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

user.remember_me = true
Run Code Online (Sandbox Code Playgroud)

另外,根据this使remember_me默认为true ,你只需要将以下内容添加到你的User.rb中

def remember_me
  true
end
Run Code Online (Sandbox Code Playgroud)

不确定哪一个是官方答案,这三个都不适合我。它仅适用于 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
Run Code Online (Sandbox Code Playgroud)

JPN*_*JPN 3

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

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

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