【问题标题】:What is the correct way to use Devise gem authentication with Mobile (Rails)将 Devise gem 身份验证与 Mobile (Rails) 一起使用的正确方法是什么
【发布时间】:2012-09-20 12:44:40
【问题描述】:

我在我的应用程序中使用 Devise gem 进行 Web 身份验证。

现在我要为我的应用程序编写一个移动应用程序,其中包括登录/注册过程。

我应该使用什么正确方法来登录用户并验证用户从移动应用程序发出的每个呼叫?

以下哪个策略是正确的? (我不确定采用哪种方法更安全)

注意:上图可以在http://i.stack.imgur.com/I13uT.png查看(会更清晰)

仅供参考:我正在使用 Titanium 开发移动应用,我的后端服务器运行 Rails 应用

【问题讨论】:

  • 我只是想仔细检查一下,但这是充当您的服务器的 Rails 应用程序,对吧?
  • 谢谢,我会试着在下面整理一个答案。

标签: ruby-on-rails devise titanium-mobile


【解决方案1】:

我不确定#1 的安全性如何,因为后续请求都没有以任何方式签名。如果有人知道您的应用程序的文件结构,他们可以通过这种方式访问​​它,对吗?

使用 Devise,您可以在 User 模型上设置一个属性,以允许通过令牌对用户进行身份验证:

class User < ActiveRecord::Base
  devise :token_authenticatable
  # there are other details and options on this, but this is the relevant piece
end

在每个控制器上,您还可以通过在开头包含before_filter :authenticate_user! 来验证用户是否已通过身份验证:

class PostsController < ActionController::Base
  before_filter :authenticate_user!
end

从移动应用发出请求时,请在请求中包含 auth_token,以便 Rails 应用可以在响应之前进行身份验证。

除了身份验证之外,您可能还对 CanCan 之类的东西感兴趣来处理授权。

【讨论】:

  • 每次调用都会刷新 authtoken 吗?还是静态的?
  • 默认情况下我认为令牌是静态的,但是从设计 2.1 开始,您可以在设计的配置中添加一行以在会话超时时重置令牌。 config.expire_auth_token_on_timeout = truegithub.com/plataformatec/devise/commit/…
  • 谢谢,balanv。我正在为 iOS 开发人员开发 Rails API,并且在一些地方遇到了困难,因此希望建立一些业力哈哈
【解决方案2】:

模型 #1 不安全,您没有在后续请求中通过任何类型的身份验证,以验证用户仍然是他们所说的那个人。

我假设您真正想知道的是,在登录后验证用户的最佳方式是他们所说的身份。我之前已经回答过这个问题,Exposing Rails/Devise Authentication to iOS application,同样的答案也适用于这里.

在 Devise 中使用令牌身份验证将匹配模型 #2,并且也是最安全的,因为您将用户名/密码交换为令牌,而不必存储他们的用户名和密码并在每个请求中重复使用它。

【讨论】:

    猜你喜欢
    • 2021-07-04
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    相关资源
    最近更新 更多