ruby-on-rails - API 的 Rails 身份验证

标签 ruby-on-rails ruby-on-rails-3 devise

我目前正在开发一个应用程序,除了通常的可视化 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/

相关文章:

android - ruby 试运行没有这样的文件或目录/platform-tools/adb (Errno::ENOENT)

jquery - 仅带有图标的 Rails 字段选择框

ruby-on-rails - 'ActionView::Template::Error - 没有路由匹配'为 "old style"语句传递 'link_to' 参数

ruby-on-rails - 使用 Devise in Rails 4 的虚拟属性

ruby-on-rails - jail 长认证返回401

ruby-on-rails - 设计 omniauth-github oauth2 错误 "bad_verification_code"

ruby-on-rails - 尝试安装 Rails (OSX) 时出现权限错误

ruby-on-rails - 设计登录时多加一个条件来检查

ruby-on-rails-3 - 本地化月份名称 simple_form Rails

ruby-on-rails-3 - 如何使用 Rails 3/MetaSearch 在查询中选择 SUM?