实现resource_owner_authenticator不起作用

时间:2014-05-09 22:57:17

标签: ruby-on-rails-4 oauth-2.0 doorkeeper

我正在使用网页编写API。我想要Oauth2登录,以便我可以通过移动设备保持会话,我已经安装了GEM门卫并运行迁移如何在 this site.

上解释

我遇到的问题是在resource_owner_from_credentials部分,因为我有一个User模型,它具有来自rails的has_secure_password帮助程序给出的身份验证方法。这就是我的/config/initializers/doorkeeper.rb文件的样子

Doorkeeper.configure do
  # Change the ORM that doorkeeper will use.
  # Currently supported options are :active_record, :mongoid2, :mongoid3, :mongo_mapper
  orm :active_record

  # This block will be called to check whether the resource owner is authenticated or not.
  resource_owner_from_credentials do
    User.find_by_email(params[:email]).authenticate(params[:password])
  end
##lots of comments
end

什么时候去

localhost:3000/oauth/authorize 

我明白了:

config/initializers/doorkeeper.rb:8:in `block (2 levels) in <top (required)>'
然后我尝试了:

 http://127.0.0.1:3000/oauth/authorize?email=puca@gmail.com&password=porche 

和相同的

我在做错了什么?我该如何配置source_owner_authenticator块?我如何获得令牌?

1 个答案:

答案 0 :(得分:1)

根据this doorkeeper wiki page,您需要使用以下参数向/oauth/token API发送POST请求:

{
  "grant_type"    : "password",
  "username"      : "user@example.com",
  "password"      : "sekret"
}

处理此请求时,门卫会调用resource_owner_from_credentials块并将参数传递给它。因此,您可以访问名为username而非email的参数。

总结一下,将API端点修改为/oauth/token,将params[:email]更改为params[:username],一切都应该有效。