【发布时间】:2023-03-15 14:35:02
【问题描述】:
我正在尝试在 ruby on rails 中实现我的第一个基于 authlogic 的应用程序。我需要使用自定义 oauth2 流程对用户进行签名,在流程结束时,我想告诉 authlogic 我希望他对哪个用户进行身份验证。无需提供登录名或密码,只需直接传递用户对象即可。
我在 README 中发现我可以使用 UserSession.create(user, true) 做到这一点,但将其放在我的 OAuth 回调步骤的末尾并不会保留我的用户。没有错误也没有异常,一切似乎都很好,但UserSession.find 返回 nil(即使在UserSession.create 之后的下一行)。我在 Rails 5.1.6 和 authlogic 4.0.1 上。
用户模型
class User < ApplicationRecord
acts_as_authentic
end
用户会话模型
class UserSession < Authlogic::Session::Base
end
提前感谢任何关于我做错了什么的线索。
【问题讨论】:
-
是
oauth回调只是facebook给你打电话controller#action吗?如果是这样,您只是在该操作结束时添加了UserSession.create(user, true)? -
这并不像我实际使用乳齿象 oauth 那样简单,但这是一个完全自定义的解决方案。重要的是,在控制器操作中,我知道我想要验证哪个用户,但我不想使用他的电子邮件/通行证来做到这一点。我只想直接认证他。为了简单起见 - 让我们假设我有一个非常愚蠢的操作,它从 DB 获取最后一个用户并将他登录 -
UserSession.create(User.last, true) -
如果你这样做
session = UserSession.create(user, true)和put session.errors.full_messages,我们可以更好地理解这个问题 -
我尝试调试错误但没有任何错误(
session是#<UserSession: {:unauthorized_record=>"<protected>"}>)。顺便说一句 - 我的应用程序中唯一不标准的事情是我在表中没有电子邮件、登录名和密码字段。以防万一。 -
我想阅读
UserSession的源代码,但现在我正在阅读使用rails github.com/binarylogic/authlogic#2-rails设置authlogic的指令