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

Jan*_*ane 2 ruby ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)

步骤2.然后,我尝试通过发送邮件请求来检索令牌:

https://github.com/login/oauth/access_token
Run Code Online (Sandbox Code Playgroud)

使用参数:client_id,client_secret和步骤1中收到的代码,但我得到404.

问题1:这些步骤是正确的还是我遗漏了什么?

问题2:成功登录后我需要在数据库中保存哪些参数进行身份验证(我使用的是用户模型).

Jes*_*lak 6

如果您使用的是Omniauth,则应该将用户指向

"/auth/github"
Run Code Online (Sandbox Code Playgroud)

然后设置这样的路线:

match '/auth/:provider/callback', :to => 'sessions#create'
match '/auth/failure', :to => 'sessions#failure'
Run Code Online (Sandbox Code Playgroud)

Omniauth将处理其他所有内容,您将返回包含所有用户信息的哈希值.

然后,要获取访问令牌,您必须提交一个帖子请求,如下所示:

POST https://github.com/login/oauth/access_token?
client_id=...&
redirect_uri=http://www.example.com/oauth_redirect&
client_secret=...&
code=...
Run Code Online (Sandbox Code Playgroud)

我想你错过了redirect_uri,所以GitHub通过向https://github.com/login/oauth/access_token提交GET请求来重定向,这会返回404错误.


Kon*_*ski 5

嗯,虽然这真的很傻,但这也发生在我身上,原因是......我把它client_idclient_secret粘贴它们的时候混在了一起;-)

最终结果如上所述,github以404回应.可能这也是这个问题背后的"问题";-)