0

このように明示的にセッションを作成しようとしていますが、セッションがUserSession.create(@user, true)作成されていません。current_usernil

しかし、これを行うと、<#UserSession:{:unauthorized_record=>""}>が表示されます。

us = UserSession.create(@user, true)
RAILS_DEFAULT_LOGGER.info(us.inspect) #=> UserSession: {:unauthorized_record=>""}

Authlogic :: Session::UnauthorizedRecordを見てみました。

Authlogicは、ユーザーが本人であることをすでに確認していると想定しているため、これには注意してください。たとえば、これはセッションを内部的に永続化するために使用されるメソッドです。Authlogicは、永続性トークンを持つユーザーを検索します。この時点で、ユーザーが本人であることがわかっているため、Authlogicはレコードとのセッションを作成するだけです。これは、OpenIDなどのサードパーティの認証方法で特に役立ちます。そのメソッドにIDを検証させ、検証されたら、オブジェクトを渡してセッションを作成します。

これはまさに私がやろうとしていることです(私はomniauthを使用して認証し、authlogicを使用してセッションを作成しています)。

で有効なセッションを取得できるように、これを修正するにはどうすればよいですcurrent_userか?

4

5 に答える 5

3

ユーザーに対してpersistence_tokenがnilであることが原因で、同様の問題が発生しました。UserSessionを作成する前にリセットしてください。それで...

@user.reset_persistence_token!
UserSession.create(@user, true)
于 2012-06-05T18:37:36.013 に答える
2

.create(object、bool)メソッドのシグネチャについてはよくわかりませんが、次はauthlogicを使用して機能します。

class Api::ApiBaseController < ApplicationController  
  protected

  def verify_token    
    return false if params[:token].blank?
    @session = UserSession.new(User.find_by_single_access_token(params[:token]))
    @session.save
  end
end

それがうまくいかない場合は、@userが正しく設定されていないと思います。

于 2010-11-15T00:04:31.133 に答える
1

をテーブルにマップするactive_record_storeと、authlogic user_sessionsセッション情報がデータベースに保存され、より多くのデータセットを保存できるようになります。

構成フォルダー内: config/initializers/session_store.rb

  • コメントアウトApp::Application.config.session_store :cookie_store, :key => '_App_session'
  • 追加またはコメント解除App::Application.config.session_store :active_record_store

の中にconfig/application.rb

  • アプリケーションのクラスの最後に、次を追加します。 ActiveRecord::SessionStore::Session.table_name = 'user_sessions'

アプリを再起動すると、ユーザーセッションに保存されている情報がauthlogicuser_sessionsテーブルに保存されます。

後藤:http ://apidock.com/rails/ActiveRecord/SessionStore 詳細については

于 2013-10-23T17:14:07.450 に答える
0

今のところあなたは置き換えることができます

UserSession.create @user

UserSession.create :email => @user.email, :password => @user.password

大したことではありません。

しかし、それは私を別の方法で捕らえました。ユーザーが作成されたときに取得したことを忘れactive? == falseました。に設定するとtrue、セッションが作成されます。

于 2011-03-10T21:01:26.453 に答える
0

私は今日この問題に遭遇しました。私の場合、それはCSRFトークンに関連することになりました。

OAuthコールバックに応答して、アプリでユーザーとセッションを作成しています。CSRFトークンが無効な場合(サードパーティからの場合など)、authlogicはユーザーセッションを作成しないようです。

CSRFトークンの信頼性を検証できません

修正は簡単でした:

class Oauth::UserSessionsController < ApplicationController
  skip_before_action :verify_authenticity_token, only: :callback

  def new
    # code removed...
  end

  def callback
    # code removed...
    UserSession.create(@user)
    redirect_to root_path
  end
end
于 2016-09-13T19:54:34.380 に答える