Authlogic не может найти пользователя - PullRequest
0 голосов
/ 30 августа 2010

Я интегрирую Facebook Connect с моим приложением, которое использует authlogic, facebooker и плагин authlogic_facebook_connect. После того, как я захожу через Facebook, я перенаправляюсь на первую страницу сайта (согласно моему коду) - но страница никогда не загружается! - это висит. Глядя на журнал разработки, я вижу, что что-то постоянно пытается загрузить пользователя из базы данных.

Он просто продолжается и продолжается, и каждый раз, когда я перезагружаю файл development.log (пока страница все еще пытается загрузить), он просто увеличивается - журнал разработки внизу.

Вот информация, которую я получил:

  1. Выполняя некоторую отладку, я отследил проблему до функции, предназначенной для сохранения сеанса пользователя с authlogic (без параметров):

    UserSession.find

  2. Похоже, Authlogic пытается найти пользователя в базе данных с определенным persistence_token. Если смотреть прямо на эту запись через консоль - ее маркер постоянства равен нулю (это может быть связано только с тем, что следующее, что может сделать правильно функционирующий authlogic, это установить этот persistence_token - хотя и не уверен).

Кто-нибудь может дать мне указатели?

Спасибо!


[4;36;1mUser Load (0.7ms)[0m   [0;1mSELECT * FROM "users" WHERE ("users"."id" = '4') LIMIT 1[0m
[4;35;1mUser Load (0.6ms)[0m   [0mSELECT * FROM "users" WHERE ("users"."facebook_uid" = 100001121293021) LIMIT 1[0m
[4;36;1mUser Load (0.2ms)[0m   [0;1mSELECT "users".id FROM "users" WHERE ("users"."persistence_token" = 'ddd6b0d160321e55266db847d0b4558e9ed76ab220ef3fce655c24c5d24286d56d728deda76b44741121b0b78e1c266537fbfe00bf01206a393090c5c1f475' AND "users".id <> 4) LIMIT 1[0m
[4;35;1mCACHE (0.0ms)[0m   [0mSELECT * FROM "users" WHERE ("users"."id" = '4') LIMIT 1[0m
[4;36;1mCACHE (0.0ms)[0m   [0;1mSELECT * FROM "users" WHERE ("users"."facebook_uid" = 100001121293021) LIMIT 1[0m
[4;35;1mCACHE (0.0ms)[0m   [0mSELECT "users".id FROM "users" WHERE ("users"."persistence_token" = 'ddd6b0d160321e55266db847d0b4558e9ed76ab220ef3fce655c24c5d24286d56d728deda76b44741121b0b78e1c266537fbfe00bf01206a393090c5c1f475' AND "users".id <> 4) LIMIT 1[0m
[4;36;1mCACHE (0.0ms)[0m   [0;1mSELECT * FROM "users" WHERE ("users"."id" = '4') LIMIT 1[0m
[4;35;1mCACHE (0.0ms)[0m   [0mSELECT * FROM "users" WHERE ("users"."facebook_uid" = 100001121293021) LIMIT 1[0m
[4;36;1mCACHE (0.0ms)[0m   [0;1mSELECT "users".id FROM "users" WHERE ("users"."persistence_token" = 'ddd6b0d160321e55266db847d0b4558e9ed76ab220ef3fce655c24c5d24286d56d728deda76b44741121b0b78e1c266537fbfe00bf01206a393090c5c1f475' AND "users".id <> 4) LIMIT 1[0m
[4;35;1mCACHE (0.0ms)[0m   [0mSELECT * FROM "users" WHERE ("users"."id" = '4') LIMIT 1[0m
[4;36;1mCACHE (0.0ms)[0m   [0;1mSELECT * FROM "users" WHERE ("users"."facebook_uid" = 100001121293021) LIMIT 1[0m
[4;35;1mCACHE (0.0ms)[0m   [0mSELECT "users".id FROM "users" WHERE ("users"."persistence_token" = 'ddd6b0d160321e55266db847d0b4558e9ed76ab220ef3fce655c24c5d24286d56d728deda76b44741121b0b78e1c266537fbfe00bf01206a393090c5c1f475' AND "users".id <> 4) LIMIT 1[0m
[4;36;1mCACHE (0.0ms)[0m   [0;1mSELECT * FROM "users" WHERE ("users"."id" = '4') LIMIT 1[0m
[4;35;1mCACHE (0.0ms)[0m   [0mSELECT * FROM "users" WHERE ("users"."facebook_uid" = 100001121293021) LIMIT 1[0m
[4;36;1mCACHE (0.0ms)[0m   [0;1mSELECT "users".id FROM "users" WHERE ("users"."persistence_token" = 'ddd6b0d160321e55266db847d0b4558e9ed76ab220ef3fce655c24c5d24286d56d728deda76b44741121b0b78e1c266537fbfe00bf01206a393090c5c1f475' AND "users".id <> 4) LIMIT 1[0m
[4;35;1mCACHE (0.0ms)[0m   [0mSELECT * FROM "users" WHERE ("users"."id" = '4') LIMIT 1[0m
[4;36;1mCACHE (0.0ms)[0m   [0;1mSELECT * FROM "users" WHERE ("users"."facebook_uid" = 100001121293021) LIMIT 1[0m
[4;35;1mCACHE (0.0ms)[0m   [0mSELECT "users".id FROM "users" WHERE ("users"."persistence_token" = 'ddd6b0d160321e55266db847d0b4558e9ed76ab220ef3fce655c24c5d24286d56d728deda76b44741121b0b78e1c266537fbfe00bf01206a393090c5c1f475' AND "users".id <> 4) LIMIT 1[0m

1 Ответ

0 голосов
/ 30 августа 2010

Понял!При обычной регистрации пользователя с authlogic, вот что происходит: before_validation: reset_persistence_token,: if =>: reset_persistence_token?Для этого устанавливается начальный persistence_token, если он пуст

. По какой-то причине плагин authlogic_facebook_connect пропускает эту проверку, в результате чего поле NULL persistence_token отправляется в базу данных.

В моемТаблица пользователей, у меня было поле persistence_token как таковое

t.string :persistence_token

, оно должно быть определено так, но убедитесь, что оно не равно нулю:

t.string :persistence_token, :null => false

Теперь вместо зависанияв браузере вы получаете ошибку sqlite, в которой говорится, что токен постоянства равен нулю.Это лучше, теперь мы знаем, что происходит.

Переход к методу validate_by_facebook_connect плагина authlogic_facebook_connect, расположенного в vendor / plugins / authlogic_facebook_connect / lib / authlogic_facebook_connect / session.rb, где написано

new_user.send(:"#{facebook_uid_field}=", facebook_session.user.uid)
new_user.send(:"#{facebook_session_key_field}=", facebook_session.session_key)

добавить еще одну строку, чтобы она гласила:

new_user.send(:"#{facebook_uid_field}=", facebook_session.user.uid)
new_user.send(:"#{facebook_session_key_field}=", facebook_session.session_key)
new_user.reset_persistence_token

Теперь мы удостоверимся, что у нас установлен токен постоянства при первом создании пользователя.сделайте это снова, браузер не зависает, пользователь создается, добро пожаловать в рабочую настройку authlogic facebook connect.

Несмотря на то, что я включил исправление в плагин authlogic_facebook_connect, это действительно проблема с авторизацией.


РЕДАКТИРОВАТЬ:

  1. Я отправил билет на страницу authlogic github об этой проблеме
  2. Я написал сообщение в блоге об этой проблеме, чтобы помочь другим, кто застрял с ней.
...