我正在使用网页编写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块?我如何获得令牌?答案 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]
,一切都应该有效。