亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用三方Github做授權登錄

發布時間:2021-11-01 10:14:03 來源:億速云 閱讀:121 作者:iii 欄目:編程語言

這篇文章主要講解了“怎么用三方Github做授權登錄”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用三方Github做授權登錄”吧!

一、授權流程二、身份注冊三、授權開發1、獲取授權碼

為了更好的看效果,獲取授權碼我處理的比較粗暴,直接在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;如果之前已經同意過,會跳過這一步直接回調。

怎么用三方Github做授權登錄

2、獲取令牌

授權后緊接著就要回調 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做授權登錄”的內容了,經過本文的學習后,相信大家對怎么用三方Github做授權登錄這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

林西县| 湘潭市| 招远市| 育儿| 葫芦岛市| 边坝县| 镇赉县| 浠水县| 开封市| 新源县| 东乡| 瓮安县| 衡阳县| 大安市| 潜山县| 绥滨县| 丰宁| 乐安县| 鸡泽县| 墨脱县| 德兴市| 吴忠市| 宝应县| 怀集县| 商洛市| 阜城县| 偃师市| 定南县| 田林县| 泾阳县| 大厂| 清水县| 海淀区| 黑山县| 建宁县| 常山县| 仪征市| 页游| 四子王旗| 务川| 阆中市|