2010-11-14 7 views
0

Я пытаюсь создать сеанс явно так UserSession.create(@user, true), но сеанс не создается, current_user - nil.authlogic UserSession.create (@user), дающий unauthorized_record

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

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

я посмотреть на Authlogic::Session::UnauthorizedRecord здесь говорит

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

, который является именно тем, что я пытаюсь сделать (я проверяю использование omniauth и создаю сессию с использованием authlogic).

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

+0

Я нашел ваш вопрос, испытывая те же проблемы. Я обнаружил, что у вас, вероятно, есть действительный 'current_user', который просто недоступен, как вы думаете. Проверьте мой ответ на этот другой аналогичный вопрос: http://stackoverflow.com/questions/6638927/usersession-unauthorized-record-protected/33636110#33636110 – Aaron

ответ

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 установлен неправильно.

+0

nope! все равно тот же результат <#UserSession: {: unauthorized_record => ""}> Я фактически сохраняю объект пользователя, не пропуская проверки подлинности, как это @ user.save (false) очевидно authlogic не может найти пароль и адрес электронной почты , может ли это быть причиной, по которой ее несанкционирован? должен быть какой-то способ! – Madhusudhan

+0

ok Я нашел ошибку. persistence_token не был установлен, когда пользовательский объект был сохранен !. благодаря! – Madhusudhan

+3

У меня такая же проблема; persistence_token - ноль, но как вы это исправили? –

0

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

UserSession.create @user 

в

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

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

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

3

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

@user.reset_persistence_token! 
UserSession.create(@user, true) 
+0

Это сработало для меня! –

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'

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

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

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