authlogic UserSession.create (@user), предоставляющий unauthorized_record - PullRequest
0 голосов
/ 15 ноября 2010

Я пытаюсь создать сеанс в явном виде, как этот UserSession.create(@user, true), но сеанс не создается, current_user равен nil.

Но когда я это делаю, я получаю <#UserSession: {: unauthorized_record => ""}>

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

Я посмотрел на Authlogic :: Session :: UnauthorizedRecord здесь написано

Будьте осторожны с этим, потому что Authlogic предполагает, что вы уже подтвердили, что пользователь является тем, кем, по его словам, он является.Например, этот метод используется для внутреннего сохранения сеанса.Authlogic находит пользователя с токеном постоянства.На данный момент мы знаем, что пользователь - это тот, кем он себя называет, поэтому Authlogic просто создает сеанс с записью.Это особенно полезно для сторонних методов аутентификации, таких как OpenID.Позвольте этому методу проверить личность, как только он будет проверен, передайте объект и создайте сеанс.

, именно это я и пытаюсь сделать (я аутентифицируюсь с помощью omniauth и создаю сеанс с использованием authlogic).

Как это исправить, чтобы я мог получить действительный сеанс в current_user?

Ответы [ 5 ]

3 голосов
/ 05 июня 2012

У меня была похожая проблема, вызванная тем, что persistence_token был нулем для пользователяСбросьте его перед созданием UserSession.Итак ...

@user.reset_persistence_token!
UserSession.create(@user, true)
2 голосов
/ 15 ноября 2010

Я не уверен насчет сигнатуры метода .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 настроен неправильно.

1 голос
/ 23 октября 2013

Если вы сопоставите 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'

Перезапустите приложение, и любая информация, сохраненная в сеансе пользователя, будет сохранена в таблице authlogic user_sessions.

Перейти: http://apidock.com/rails/ActiveRecord/SessionStore Для получения дополнительной информации

0 голосов
/ 13 сентября 2016

Я столкнулся с этой проблемой сегодня.В моем случае это было связано с токенами 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
0 голосов
/ 11 марта 2011

На данный момент вы можете заменить

UserSession.create @user

до

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

не имеет большого значения.

Но это поймало меня по-другому. Я забыл, что мой пользователь получил active? == false при создании. Я установил true и сессия создана.

...