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 ...しかし、よりシンプルなソリューションを望んでいます。

ありがとう


解決:

「トークン」列が 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 は保持されます。

これを試して:

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

実際、この答えはあなたが探しているものです。

于 2012-06-02T14:30:00.150 に答える