我目前正在开发一个应用程序,除了通常的可视化 Web 应用程序之外,goop 还将公开一些 RESTful API 服务以供外部应用程序使用。我正在使用 Devise 来管理用户身份验证,但我正在努力解决如何在给定特定输入的情况下“手动”对用户进行身份验证。
我遇到的情况是,我希望 API 用户登录时无需实际进入可视化登录屏幕等。我希望他们提交用户名和密码,然后在我的网站上进行身份验证并登录API 服务。
我知道您可以使用 Devise 提供的 sign_in
方法登录用户,但这似乎完全忽略了身份验证。这是我想做的更详细的解释:
假设在用户 Controller 中有一个名为 connect 的 GET 路由。 Controller 将完全替换 Devise 注册 Controller ,但不会替换 session Controller 。我的服务的 URL 是:
<server>/users/connect
除了一些特定于服务且对我的问题不重要的 goop 之外,它还需要“电子邮件”、“密码”参数。
我想知道的是如何实现等同于以下伪代码的东西:
def connect
user = User.find_by_email(params[:email])
password = params[:password]
# here is the part I'm pseudo coding out
if user.is_valid_password(password)
...do my stuff...
end
render :json ...etc...
end
我一直无法在 Devise 源代码中找到执行此操作的方法——它在很多方面都如此普遍,以至于我可能只是想念它。
有人有什么想法吗?我希望不会 a) 必须实现我自己的东西,并且 b) 不必离开 Devise。它为我提供了很多非 API 服务......
谢谢!
我漏掉了
最佳答案
Devise 的 token_authenticatable 是实现这一目标的方法。我们已经多次成功地使用它来进行基于 api 的登录。
在 config/initializers/devise.rb 中
config.token_authentication_key = :nameofyourapikeyhere
在 user.rb 中:
devise … token_authenticatable, ...
在上面,您可以将 api key 命名为任何名称,然后将您的路由设置为/users/connect?apikey=whatever(以 apikey 为例)。在数据库中,它将是 authentication_token,但它可以正常工作。
澄清一下,如果用户有一个 authentication_token 并且它是在参数中发送的(或者它是别名 - 在上面的例子中:apikey),他们将登录。
关于ruby-on-rails - API 的 Rails 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7446089/