您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么用三方Github做授權登錄”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用三方Github做授權登錄”吧!
為了更好的看效果,獲取授權碼我處理的比較粗暴,直接在JS
里拼裝好了授權鏈接,但實際工作開發中一定要考慮到安全問題。
https://github.com/login/oauth/authorize?
client_id=ad41c05c211421c659db&
redirect_uri=http://47.93.6.5:8080/authorize/redirect
前端
vue
的邏輯也非常簡單,只需要
window.location.href
重定向一下。
<script>
export default {
methods: {
loginByGithub: function (
) {
window.location.href = 'https://github.com/login/oauth/authorize?client_id=ad41c05c211421c659db&redirect_uri=http://47.93.6.5:8080/authorize/redirect'
}
}
}
</script>
請求后會提示讓我們授權,同意授權后會重定向到authorize/redirect
,并攜帶授權碼code
;如果之前已經同意過,會跳過這一步直接回調。
授權后緊接著就要回調
fire
網站接口,拿到授權碼以后拼裝獲取令牌
access_token
的請求鏈接,這時會用到客戶端密匙client_secret
。
https://github.com/login/oauth/access_token?
client_id=${clientID}&
client_secret=${clientSecret}&
code=${requestToken}
access_token
會作為請求響應返回,結果是個串字符,需要我們截取一下。
access_token=4dc43c2f43b773c327f97acf5dd66b147db9259c&scope=&token_type=bearer
有了令牌以后開始獲取用戶信息,在
API
中要帶上access_token
。
https://api.github.com/user?access_token=4dc43c2f43b773c327f97acf5dd66b147db9259c
返回的用戶信息是
JSON
數據格式,如果想把數據傳遞給前端,可以通過
url
重定向到前端頁面,將數據以參數的方式傳遞。
{
"login": "chengxy-nds",
"id": 12745094,
"node_id": "",
"avatar_url": "https://avatars3.githubusercontent.com/u/12745094?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/chengxy-nds",
"html_url": "https://github.com/chengxy-nds",
"followers_url": "https://api.github.com/users/chengxy-nds/followers",
"following_url": "https://api.github.com/users/chengxy-nds/following{/other_user}",
"gists_url": "https://api.github.com/users/chengxy-nds/gists{/gist_id}",
"starred_url": "https://api.github.com/users/chengxy-nds/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/chengxy-nds/subscriptions",
"organizations_url": "https://api.github.com/users/chengxy-nds/orgs",
"repos_url": "https://api.github.com/users/chengxy-nds/repos",
"events_url": "https://api.github.com/users/chengxy-nds/events{/privacy}",
"received_events_url": "https://api.github.com/users/chengxy-nds/received_events",
"type": "",
"site_admin": false,
"name": "程序員內點事",
"company": null,
"blog": "",
"location": null,
"email": "",
"hireable": null,
"bio": null,
"twitter_username": null,
"public_repos": 7,
"public_gists": 0,
"followers": 14,
"following": 0,
"created_at": "2015-06-04T09:22:44Z",
"updated_at": "2020-07-13T06:08:57Z"
}
下邊是
GitHub
回調我們
fire
網站后端處理流程的部分代碼,寫的比較糙,后續繼續優化吧!
/**
* @param code
* @author xiaofu
* @description 授權回調
* @date 2020/7/10 15:42
*/
@RequestMapping("/authorize/redirect")
public ModelAndView authorize(@NotEmpty String code) {
log.info("授權碼code: {}", code);
/**
* 重新到前端主頁
*/
String redirectHome = "http://47.93.6.5/home";
try {
/**
* 1、拼裝獲取accessToken url
*/
String accessTokenUrl = gitHubProperties.getAccesstokenUrl()
.replace("clientId", gitHubProperties.getClientId())
.replace("clientSecret", gitHubProperties.getClientSecret())
.replace("authorize_code", code);
/**
* 返回結果中直接返回token
*/
String result = OkHttpClientUtil.sendByGetUrl(accessTokenUrl);
log.info(" 請求 token 結果:{}", result);
String accessToken = null;
Pattern p = Pattern.compile("=(\\w+)&");
Matcher m = p.matcher(result);
while (m.find()) {
accessToken = m.group(1);
log.info("令牌token:{}", m.group(1));
break;
}
/**
* 成功獲取token后,開始請求用戶信息
*/
String userInfoUrl = gitHubProperties.getUserUrl().replace("accessToken", accessToken);
String userResult = OkHttpClientUtil.sendByGetUrl(userInfoUrl);
log.info("用戶信息:{}", userResult);
UserInfo userInfo = JSON.parseObject(userResult, UserInfo.class);
redirectHome += "?name=" + userInfo.getName();
} catch (Exception e) {
log.error("授權回調異常={}", e);
}
return new ModelAndView(new RedirectView(redirectHome));
}
最后我們動圖看一下整體的授權流程,由于GitHub
的訪問速度比較慢,偶爾會有請求超時的現象。
感謝各位的閱讀,以上就是“怎么用三方Github做授權登錄”的內容了,經過本文的學習后,相信大家對怎么用三方Github做授權登錄這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。