使用gitee进行第三方登录
解决方法:调用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;