1. 程式人生 > 其它 >利用Github作為第三方登入時,token返回的值全為null的問題

利用Github作為第三方登入時,token返回的值全為null的問題

技術標籤:Bug集錦java

今天是一個崩潰的下午,因為利用OKhttp3利用post方式返回伺服器時,官網上的程式碼明明是:

public static final MediaType JSON
    = MediaType.get("application/json; charset=utf-8");

OkHttpClient client = new OkHttpClient();

String post(String url, String json) throws IOException {
  RequestBody body = RequestBody.
create(json, JSON); Request request = new Request.Builder() .url(url) .post(body) .build(); try (Response response = client.newCall(request).execute()) { return response.body().string(); } }

是啊,沒錯啊,那我就直接把這個程式碼拷過去寫了,結果,它返回的token值跟我手動在github上獲取到的personal access tokens不一致。

我打印出我的token值,利用https://api.github.com/user?+我的token值

去訪問,出現了下圖所示情況:
在這裡插入圖片描述
意思就是說,token必須放在header裡面傳參。
好的嘛,那我面向百度程式設計,放在header裡面傳參好了,把從OKhttp3拷過來的程式碼改為:

OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url("https://api.github.com/user")
                .header("Authorization","token"
+accessToken) .build();

心想著這回總可以了吧,結果,還是這個錯誤!

後來我以為是我建立的OAuth Apps與Github Apps重名了,導致生成的token是另一個Apps的token,於是我又新建了一個OAutuh App,結果還是這個樣子。

崩潰到後來發現,確實還是將token放在header裡傳參的問題。將程式碼改為下圖所示就可以了。

OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url("https://api.github.com/user?access_token=" + accessToken)
                .header("Authorization","token "+accessToken)
                .build();

哦,忘了貼最初始的程式碼:

OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url("https://api.github.com/user?access_token=" + accessToken)
                .build();

將兩者放在一起對比一下,發現就是要將token放在Authorization Header中傳參。

上面那種方式也發生錯誤,是因為,雖然將token放到header中傳參了,但是url就錯了,因為壓根沒有將token值傳進來。不加“access_token="倒是小問題,只要訪問時位址列不要寫這個就可以了。