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