我正在使用omniauth-github gem,我注意到用户被保存在会话cookie中:
SessionsController:
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
答案 0 :(得分:1)
你必须使用cookie。会话在浏览器关闭时结束。在此之后,cookie仍然存在。
试试这个:
def create
...
cookies[:user_id] = user.id
...
end
实际上this answer正是您正在寻找的。 p>
答案 1 :(得分:0)
这对我来说是这样的:
def google_oauth2
@user = User.from_google(google_params)
if @user.persisted?
@user.remember_me = true
sign_in @user
........
end
end