Ruby on rails Authlogic可以';找不到用户

Ruby on rails Authlogic可以';找不到用户,ruby-on-rails,ruby,authentication,sqlite,authlogic,Ruby On Rails,Ruby,Authentication,Sqlite,Authlogic,我正在将facebook connect与我的应用程序集成,该应用程序使用authlogic、facebooker和authlogic\u facebook\u connect插件。在我登录facebook后,我会被重定向到该网站的首页(根据我的代码)-但该页面从未加载它挂着。 查看开发日志,我看到有东西在不断尝试从数据库加载用户 每次我重新加载development.log(当页面仍在尝试加载时),它就会变得更大——底部的开发日志 以下是我得到的信息: 在进行一些调试时,我将问题追溯到用于使用

我正在将facebook connect与我的应用程序集成,该应用程序使用authlogic、facebooker和authlogic\u facebook\u connect插件。在我登录facebook后,我会被重定向到该网站的首页(根据我的代码)-但该页面从未加载它挂着。 查看开发日志,我看到有东西在不断尝试从数据库加载用户

每次我重新加载development.log(当页面仍在尝试加载时),它就会变得更大——底部的开发日志

以下是我得到的信息:

  • 在进行一些调试时,我将问题追溯到用于使用authlogic(无参数)持久化用户会话的函数:

    UserSession.find

  • 看起来Authlogic正试图在数据库中查找具有某个
    持久性\u令牌的用户。通过控制台直接查看该记录-其持久性令牌为空(这可能是因为正常运行的authlogic下一步要做的事情是设置该持久性令牌-但不确定)

  • 有人能给我指点吗

    谢谢


    [4;36;1用户负载(0.7ms)[0m[0;1从“用户”中选择*,其中(“用户”。“id”=“4”)限制为1[0m
    [4;35;1用户负载(0.6ms)[0m[0m从“用户”中选择*,其中(“用户”。“facebook_uid”=10000121293021)限制1[0m
    [4;36;1用户负载(0.2ms)[0m[0;1从“用户”中选择“用户”。id,其中(“用户”。“持久性令牌”='DDD6B0D160321E55266DB847D0B4558E9ED76AB220EF3FCE65C24C5D24286D56D728DEDA76B44741120B78E1C266537FBFE00BF01206A393090C5C1F475'和“用户”。id 4)限制1[0m
    [4;35;1mCACHE(0.0ms)[0m[0m从“用户”中选择*,其中(“用户”。“id”=“4”)限制为1[0m
    [4;36;1mCACHE(0.0ms)[0m[0;1mSELECT*来自“用户”,其中(“用户”。“facebook_uid”=10000121293021)限制为1[0m
    [4;35;1mCACHE(0.0ms)[0m[0m选择“用户”。id来自“用户”,其中(“用户”。“持久性令牌”=“DDD6B0D160321E55266DB847D0B4558E9ED76AB220EF3FCE65C24C5D24286D56D728DEDA76B44741121B0B78E1C266537FBFE00BF01206A393090C5C1F475”和“用户”。id 4)限制1[0m
    [4;36;1mCACHE(0.0ms)[0m[0;1mSELECT*来自“用户”,其中(“用户”。“id”=“4”)限制为1[0m
    [4;35;1mCACHE(0.0ms)[0m[0m从“用户”中选择*,其中(“用户”。“facebook_uid”=10000121293021)限制为1[0m
    [4;36;1mCACHE(0.0ms)[0m[0;1M从“用户”中选择“用户”。id,其中(“用户”。“持久性令牌”='DDD6B0D160321E55266DB847D0B4558E9ED76AB220EF3FCE65C24C5D24286D56D728DEDA76B44741121B0B78E1C266537FBFE00BF01206A3930C5C1F1F475'和“用户”。id 4)限制1[0m
    [4;35;1mCACHE(0.0ms)[0m[0m从“用户”中选择*,其中(“用户”。“id”=“4”)限制为1[0m
    [4;36;1mCACHE(0.0ms)[0m[0;1mSELECT*来自“用户”,其中(“用户”。“facebook_uid”=10000121293021)限制为1[0m
    [4;35;1mCACHE(0.0ms)[0m[0m选择“用户”。id来自“用户”,其中(“用户”。“持久性令牌”=“DDD6B0D160321E55266DB847D0B4558E9ED76AB220EF3FCE65C24C5D24286D56D728DEDA76B44741121B0B78E1C266537FBFE00BF01206A393090C5C1F475”和“用户”。id 4)限制1[0m
    [4;36;1mCACHE(0.0ms)[0m[0;1mSELECT*来自“用户”,其中(“用户”。“id”=“4”)限制为1[0m
    [4;35;1mCACHE(0.0ms)[0m[0m从“用户”中选择*,其中(“用户”。“facebook_uid”=10000121293021)限制为1[0m
    [4;36;1mCACHE(0.0ms)[0m[0;1M从“用户”中选择“用户”。id,其中(“用户”。“持久性令牌”='DDD6B0D160321E55266DB847D0B4558E9ED76AB220EF3FCE65C24C5D24286D56D728DEDA76B44741121B0B78E1C266537FBFE00BF01206A3930C5C1F1F475'和“用户”。id 4)限制1[0m
    [4;35;1mCACHE(0.0ms)[0m[0m从“用户”中选择*,其中(“用户”。“id”=“4”)限制为1[0m
    [4;36;1mCACHE(0.0ms)[0m[0;1mSELECT*来自“用户”,其中(“用户”。“facebook_uid”=10000121293021)限制为1[0m
    [4;35;1mCACHE(0.0ms)[0m[0m选择“用户”。id来自“用户”,其中(“用户”。“持久性令牌”=“DDD6B0D160321E55266DB847D0B4558E9ED76AB220EF3FCE65C24C5D24286D56D728DEDA76B44741121B0B78E1C266537FBFE00BF01206A393090C5C1F475”和“用户”。id 4)限制1[0m
    
    明白了! 在authlogic的正常用户注册中,会发生以下情况: 在\u验证之前:重置\u持久性\u令牌,:if=>:重置\u持久性\u令牌? 如果初始持久性令牌为空,则设置它

    出于某种原因,authlogic\u facebook\u connect插件会跳过此验证,从而导致向数据库发送一个空的persistence\u令牌字段

    在我的users表中,我有一个字段
    persistence\u token

    t.string :persistence_token
    
    应该这样定义它,但要确保它不是空的:

    t.string :persistence_token, :null => false
    
    现在,不是挂起浏览器,而是得到一个sqlite错误,表示持久性令牌为null。这样更好,现在我们知道发生了什么

    转到位于vendor/plugins/authlogic\u facebook\u connect/lib/authlogic\u facebook\u connect/session.rb内的authlogic\u facebook\u connect插件的
    validate\u by\u facebook\u connect
    方法,其中显示

    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\u facebook\u connect插件中包含了修复程序,但这确实是一个authlogic问题


    编辑:

  • 我把一张票交给了警察局 关于 本期
  • 我写了一篇关于这个问题的文章来帮助其他陷入困境的人
  • 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