Omniauth:使用Github登录(404访问令牌)

时间:2012-01-11 17:25:03

标签: ruby-on-rails ruby github sinatra omniauth

我使用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:成功登录后,我需要在数据库中保存哪些参数进行身份验证(我使用的是用户模型)。

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_idclient_secret混为一谈; - )

最终结果如上所述,github以404响应。 可能这也是这个问题背后的“问题”; - )