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