我使用 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 步。 然后,我尝试通过向以下地址发送发布请求来检索 token :
https://github.com/login/oauth/access_token
带有参数:client_id、client_secret 和在步骤 1 中收到的代码,但我得到 404。
问题 1:这些步骤是否正确,还是我遗漏了什么?
问题2:我需要在数据库中保存哪些参数以在成功登录后进行身份验证(我使用用户模型)。
最佳答案
如果您使用的是 Omniauth,您应该将用户指向
"/auth/github"
然后像这样设置路由:
match '/auth/:provider/callback', :to => 'sessions#create'
match '/auth/failure', :to => 'sessions#failure'
Omniauth 将处理所有其他事情,您将返回一个包含所有用户信息的哈希值。
然后要获取访问 token ,您必须按如下方式提交发布请求:
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 错误。
关于ruby-on-rails - Omniauth:使用 Github 登录(404 访问 token ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8823760/