Omniauth:如何在浏览器关闭后让用户登录?

时间:2012-06-02 14:27:30

标签: ruby-on-rails

我正在使用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

2 个答案:

答案 0 :(得分:1)

你必须使用cookie。会话在浏览器关闭时结束。在此之后,cookie仍然存在。

试试这个:

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

实际上this answer正是您正在寻找的。

答案 1 :(得分:0)

这对我来说是这样的:

def google_oauth2
  @user = User.from_google(google_params)

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

There is another way to do it