java開發bug問題:GitHub受權登陸沒法獲取受權帳號信息
項目場景:
在作仿碼問論壇項目例子,照着一個視頻寫,作到登陸採用GitHub第三方受權登陸,遇到了一個坑,視頻中那個大佬實現,我卻出不來, 一時不知道爲何,後來查閱許多資料才順利完成,固然,如今那個項目已經完成了問題描述:
登陸採用GitHub第三方受權登陸時,檢查返回的token信息無誤,接着根據token得到對應的GitHub的User信息,發現它返回爲空,沒法得到user信息,後臺報沒有受權的權限,當時本身就沒有想明白,中間反覆調式,最終定位到根據返回的token沒法獲取對應的user信息,反正這中間花了很多時間去查閱資料,瞭解受權登陸時的問題,發現沒有人遇到個人問題,當時還懷疑過是否是返回的token錯,後來測試了一下發現token沒有問題,只能問大神,大神說讓我多調式一下,說了一下思路,在我都快放棄的時候,忽然在一篇博客看到了,我將以前改以前和改以後分享出來你們就明白,這就是一個坑
改以前的寫法,我是這樣傳遞,直接將參數信息放到了url攜帶過去的,發現沒法獲取user信息
java
public GithubUser getGithubUser(String accessToken){ //get請求 OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://api.github.com/user?access_token=" + accessToken) .build(); try { //這一步有問題 debug出發現這一步報錯 Response response = client.newCall(request).execute(); String string = response.body().string(); GithubUser githubUser = JSON.parseObject(string, GithubUser.class);
解決方案:
請將access_token經過做爲Authorization HTTP header中的參數傳輸,而不是做爲url中的參數明文傳輸
改以後的,將token放到header裏傳遞過去git
public GithubUser getGithubUser(String accessToken){ //get請求 OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://api.github.com/user?") .header("Authorization","token "+accessToken) .build(); try { Response response = client.newCall(request).execute(); String string = response.body().string(); GithubUser githubUser = JSON.parseObject(string, GithubUser.class);