1

我正在使用omniauth-github gem,我注意到用户保存在会话cookie中:

会话控制器:

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

你知道在浏览器关闭后保持会话的简单方法吗?

我知道它可以通过与 Devise 的集成来实现:https ://github.com/plataformatec/devise/wiki/OmniAuth:-Overview ...但我希望有一个更简单的解决方案。

谢谢


解决方案:

'token' 列被添加到 User 模型中,然后:

class User < ActiveRecord::Base
  before_save :generate_token
  def generate_token
    self.token = SecureRandom.urlsafe_base64
  end
end

class SessionsController < ApplicationController
  def create
    user = User.from_omniauth(env["omniauth.auth"])
    cookies.permanent[:token] = user.token
  end
end

class ApplicationController < ActionController::Base
  def current_user
    @current_user ||= User.find_by_token(cookies[:token]) if cookies[:token]
  end
end
4

2 回答 2

1

您必须使用 cookie。当浏览器关闭时会话结束。即使在那之后cookie仍然存在。

尝试这个:

    def create
      ...
      cookies[:user_id] = user.id
      ...
    end

其实这个答案就是你要找的。

于 2012-06-02T14:30:00.150 回答
0

以下是它对我的工作方式:

def google_oauth2
  @user = User.from_google(google_params)

  if @user.persisted?
    @user.remember_me = true
    sign_in @user
    ........
  end
end

还有另一种方法可以做到

于 2021-03-05T21:34:39.607 回答