因此,我试图使用Desive(Rails 2.3.8的1.0.3版)中的 token 让用户登录,但我不完全确定从哪里开始.

http://zyphdesignco.com/blog/simple-auth-token-example-with-devise

上面的教程帮助我打开了令牌功能,并展示了如何生成(或删除)令牌...但 token 的全部意义在于使用它们来授权用户,对吗?

当我在控制台中看到一个用户时,我可以说是user.身份验证_令牌,然后返回类似于:"Qm1ne93n_XkgmQTvxDmm"的内容,这一切都很好...但我该怎么办呢?

我try 使用以下命令行命令在根目录中点击符号_:

curl-d"authentication_token=Qm1ne93n_XkgmQTvxDmm"本地主机:3000/users/sign_in

而且肯定没有成功登录.

在会话控制器中,我看到它们调用:

验证(资源名称)

我假设它在模块中的某个地方:

包括designe::Controllers::InternalHelpers

它被包括在内,但我不知道在哪里可以找到它(它肯定不在源代码的控制器文件夹中).如果我能看一下身份验证是如何工作的,我甚至可以看一下令牌...

你是用Devise还是用Devise框架来生成 token ?如果它真的让你和他们一起登录...你是怎么做到的?你能不能不使用curl(也就是说,它必须在浏览器中吗?如果是的话,我会使用我自己的解决方案,我需要非浏览器支持.).如果不行,我该怎么做?

推荐答案

我的理解是,即使使用cURL,也可以使用令牌登录或访问需要身份验证的任意页面.如果你看config/initializers/devise.rb,应该有一行这样的话:

config.token_authentication_key = :auth_token

无论token_authentication_key的名称是什么,都应该与您在请求中作为查询或表单参数输入的内容相匹配.您在示例中使用了authentication_token,但不确定是否更改了Desive.rb是否匹配.

如果你想弄清楚事情在内部是如何运作的,我会try git clone git://github.com/plataformatec/devise.git次,然后搜索你需要澄清的方法.

下面是一些示例cURL请求(我制作了一个自定义的Users::sessioncontroller,它扩展了designe::sessioncontroller,并重写了create方法来处理JSON)

class Users::SessionsController < Devise::SessionsController
  def create
    resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")
    set_flash_message(:notice, :signed_in) if is_navigational_format?
    sign_in(resource_name, resource)

    respond_to do |format|
      format.html do
        respond_with resource, :location => redirect_location(resource_name, resource)
      end
      format.json do
        render :json => { :response => 'ok', :auth_token => current_user.authentication_token }.to_json, :status => :ok
      end
    end
  end
end 

然后是我提出的curl 要求:

curl -X POST 'http://localhost:3000/users/sign_in.json' -d 'user[email]=example@example.com&user[password]=password'
-> {"response":"ok","auth_token":"ABCDE0123456789"}

curl -L 'http://localhost:3000/profile?auth_token=ABCDE0123456789'
-> got page that I wanted that needs authentication

Ruby-on-rails相关问答推荐

在has_many关系中由两个条件 Select

Grape api (rails) - 未初始化常量 Endpoints::TodoAPI (NameError)

您如何测试方法调用块内调用的方法,以及使用 rspec 在块内传递给该方法调用的内容

如何在 Ruby on Rails 中正确存储 BigDecimal

ViewModel 和 Controller 有什么区别?

用 url_for 查询参数?

如何将 yaml 文件解析为 ruby​​ 哈希和/或数组?

如何在我的 Gemfile 中找到未使用的Ruby

如何在 Windows 上为 Ruby 安装 sqlite3?

带有查询字符串参数的 Rails 动作缓存

如何找出现有 Rails 应用程序基于哪个 Rails 版本?

如何在 Ruby 中创建一个新的 Date 实例

rails 4 before_validation on: :create 或 on: :save

Ruby on Rails - link_to 按钮 / css

通过 Ruby 或 Rails 的 LDAP

如何仅使用 PostgreSQL 创建简单的模糊搜索?

Ruby on Rails i18n - 想要在模型中翻译自定义消息

Rails 4模块的未初始化常量

获取完整的 rails 控制器名称,包括命名空间

我怎样才能看到水豚在失败的黄瓜步骤中发现了什么?