我使用Omniauth让用户使用Github登录。
第1步。用户被发送到/auth/github
,然后重定向到github进行登录。
第2步。用户验证自身,Github返回此字符串和code
参数:
<# extra=# private_gists=0 public_gists=0 public_repos=0 total_private_repos=0 type="User" url="https://api.github.com/users/XXXXX">> info=#> provider="github" uid=13XXXXX>
params[:code] = CODEXXXXXXXXX
第2步。然后,我尝试通过发送帖子请求来检索令牌:
https://github.com/login/oauth/access_token
带参数:client_id,client_secret和步骤1中收到的代码,但我得到404.
问题1:这些步骤是正确的还是我错过了什么?
问题2:成功登录后,我需要在数据库中保存哪些参数进行身份验证(我使用的是用户模型)。
答案 0 :(得分:6)
如果您使用的是Omniauth,则应将用户指向
"/auth/github"
然后设置这样的路线:
match '/auth/:provider/callback', :to => 'sessions#create'
match '/auth/failure', :to => 'sessions#failure'
Omniauth将处理其他所有内容,您将返回包含所有用户信息的哈希值。
然后要获取访问令牌,您必须按如下方式提交帖子请求:
POST https://github.com/login/oauth/access_token?
client_id=...&
redirect_uri=http://www.example.com/oauth_redirect&
client_secret=...&
code=...
我认为你错过了redirect_uri,所以GitHub通过向https://github.com/login/oauth/access_token提交GET请求来重定向,这会返回404错误。
答案 1 :(得分:5)
嗯,虽然这真的很傻但这也发生在我身上,原因是...
在复制粘贴时,我将client_id
与client_secret
混为一谈; - )
最终结果如上所述,github以404响应。 可能这也是这个问题背后的“问题”; - )