使用gitee進行第三方登錄


問題:gitee第三方登錄

解決方法:調用API,

 

 

gitee做第三方登錄的大致過程為:首先,在碼雲端創建一個第三方應用,生成id,secret,並且填寫我們系統的主頁地址和回調地址,通過一個超鏈接跳轉至碼雲授權頁面,
點擊授權之后碼雲服務器會返回到我們所填寫的回調地址中並且攜帶兩個參數,一個是code,一個是state,然后我們攜帶code,state,和生成的相關條目,
如id,secret等請求token,碼雲服務器收到請求之后返回token,然后我們攜帶token再次訪問碼雲服務器,服務器給我們返回相關的用戶信息。

 

1.首先,在gitee創建一個第三方應用。

2.找到第三方應用,並點擊右上角的創建應用。

3.填寫相關信息,創建應用,只勾選第一個權限即可。

4.生成相關信息

至此,gitee上的第三方應用創建完畢。

5.在頁面上使用連結到gitee的某個地址,在這個地址上需要填入上面生成的client—id,redirect—uri。

<a href="https://gitee.com/oauth/authorize?client_id=你的id&redirect_uri=http://localhost:8887/callback&response_type=code&state=1">登錄</a>

6.點擊登錄會跳轉至授權頁面,如果授權成功跳轉404說明鏈接地址正確,接下來需要 編寫回調請求及其方法。

7.首先,引入兩個相關依賴。

<dependency>
           <groupId>com.squareup.okhttp3</groupId>
           <artifactId>okhttp</artifactId>
           <version>3.14.1</version>
       </dependency>
       <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>fastjson</artifactId>
           <version>1.2.78</version>
       </dependency>

8.使用okhttp發起post請求,碼雲服務器返回token,需要攜帶相關參數,我們直接封裝成一個AccessTokenDTO對象,接下來我們還需要使用token獲取用戶相關信息,將用戶也封裝成一個GitUser對象。

AccessTokenDTO對象封裝
package com.yf.community.dto;

import org.springframework.stereotype.Component;

@Component
public class AccessTokenDTO {
   private String client_id;
   private String client_secret;
   private String code;
   private String redirect_uri;
   private String state;

   public String getClient_id() {
       return client_id;
  }

   public void setClient_id(String client_id) {
       this.client_id = client_id;
  }

   public String getClient_secret() {
       return client_secret;
  }

   public void setClient_secret(String client_secret) {
       this.client_secret = client_secret;
  }

   public String getCode() {
       return code;
  }

   public void setCode(String code) {
       this.code = code;
  }

   public String getRedirect_uri() {
       return redirect_uri;
  }

   public void setRedirect_uri(String redirect_uri) {
       this.redirect_uri = redirect_uri;
  }

   public String getState() {
       return state;
  }

   public void setState(String state) {
       this.state = state;
  }
}

GiteeUser對象封裝。

package com.yf.community.dto;

public class GiteeUser {
   private String name;
   private Long id;
   private String bio;

   public String getName() {
       return name;
  }

   public void setName(String name) {
       this.name = name;
  }

   public Long getId() {
       return id;
  }

   public void setId(Long id) {
       this.id = id;
  }

   public String getBio() {
       return bio;
  }

   public void setBio(String bio) {
       this.bio = bio;
  }
}

 

請求碼雲服務器

package com.yf.community.provider;


import com.alibaba.fastjson.JSON;
import com.yf.community.dto.AccessTokenDTO;
import com.yf.community.dto.GiteeUser;
import okhttp3.*;
import org.springframework.stereotype.Component;

import java.io.IOException;

@Component
public class GitheeProvider {
   //發起post請求獲取token
   public String getAccessToken(AccessTokenDTO accessTokenDTO){
       MediaType mediaType= MediaType.get("application/json; charset=utf-8");
       OkHttpClient client = new OkHttpClient();
       RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(accessTokenDTO));
       Request request = new Request.Builder()
              .url("https://gitee.com/oauth/token?grant_type=authorization_code&code="+accessTokenDTO.getCode()+
                       "&client_id="+accessTokenDTO.getClient_id()+"&redirect_uri="+accessTokenDTO.getRedirect_uri()+
                       "&client_secret="+accessTokenDTO.getClient_secret())
              .post(body)
              .build();
       try (Response response = client.newCall(request).execute()) {
           String string = response.body().string();
           System.out.println(string);
           String str1 = string.split(":")[1];
           String str2 = str1.split("\"")[1];
           return str2;
      } catch (IOException e) {
           e.printStackTrace();
      }
       return null;
  }
   //發起get請求返回GitUser對象,
   public GiteeUser getGiteeUser(String token){
       OkHttpClient client = new OkHttpClient();
       Request request = new Request.Builder()
              .url("https://gitee.com/api/v5/user?access_token="+token)
              .build();
       try (Response response = client.newCall(request).execute()) {
           String string=response.body().string();
           GiteeUser giteeUser = JSON.parseObject(string, GiteeUser.class);
           return giteeUser;
      } catch (IOException e) {
           e.printStackTrace();
      }
       return null;
  }
}

回調請求編寫業務,成功返回我們需要的用戶信息。

package com.yf.community.controller;

import com.yf.community.dto.AccessTokenDTO;
import com.yf.community.dto.GiteeUser;
import com.yf.community.provider.GitheeProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class AuthorizeController {
   @Autowired
   private AccessTokenDTO accessTokenDTO;
   @Autowired
   private GitheeProvider githeeProvider;
   @GetMapping("/callback")
   public String callback(@RequestParam(name = "code") String code,
                          @RequestParam(name = "state") String state){
       accessTokenDTO.setClient_id("你的id");
       accessTokenDTO.setClient_secret("你的secret");
       accessTokenDTO.setRedirect_uri("http://localhost:8887/callback");
       accessTokenDTO.setCode(code);
       accessTokenDTO.setState(state);
       String token = githeeProvider.getAccessToken(accessTokenDTO);
       GiteeUser giteeUser = githeeProvider.getGiteeUser(token);
       System.out.println("id :"+giteeUser.getId());
       System.out.println("name :"+giteeUser.getName());
       System.out.println("bio :"+giteeUser.getBio());
       return "index";
  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM