【问题标题】:Devise + Omniauth + remember_me设计 + Omniauth + remember_me
【发布时间】:2014-10-10 08:13:03
【问题描述】:

对于如何记住我与 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

【问题讨论】:

    标签: devise omniauth remember-me


    【解决方案1】:

    hereJose Valim 回答。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 2012-03-05
      • 1970-01-01
      • 2014-10-18
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多