網站qq登陸(使用最簡單的方式實現QQ登錄)

前期準備1、首先開發者需要登錄QQ互聯,進行開發者認證,這裡需要個人基本信息一張手持身份證的張片2、進入應用管理頁面,依次點擊:應用管理 -> 網站應用 -> 創建應用,應用信息提交後,等待審核通過即可,這一步我們需要註意的是:網站域名需要提前備案網站信息要和備案信息一致QQ登錄實現這裡為瞭簡單,我們使用JustAuth來實現QQ登錄,該項目集成瞭Github、Gitee、QQ、微博等等第三方登錄,號稱史上最全的整合第三方登錄的開源庫。另外為瞭方便演示,就不使用SpringBoot瞭,隻用Vert.x搭建簡單的服務。1、導入依賴,其中hutool是一個工具類庫<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.3.3</version>
</dependency>
<dependency>
    <groupId>me.zhyd.oauth</groupId>
    <artifactId>JustAuth</artifactId>
    <version>1.15.2-alpha</version>
</dependency>
<dependency>
    <groupId>io.vertx</groupId>
    <artifactId>vertx-core</artifactId>
    <version>3.2.0</version>
</dependency>
<dependency>
    <groupId>io.vertx</groupId>
    <artifactId>vertx-web</artifactId>
    <version>3.2.0</version>
</dependency>2、實現服務端代碼package com.qianyu;

import cn.hutool.json.*;
import io.vertx.core.*;
import io.vertx.core.http.*;
import io.vertx.ext.web.*;
import me.zhyd.oauth.config.*;
import me.zhyd.oauth.model.*;
import me.zhyd.oauth.request.*;
import me.zhyd.oauth.utils.*;

public class Server {
    private static AuthQqRequest authQqRequest;

    private static AuthRequest createAuthRequest() {
        if (authQqRequest == null) {
            authQqRequest = new AuthQqRequest(AuthConfig.builder()
                    .clientId("你的client id")
                    .clientSecret("你的client secret")
                    .redirectUri("你的回調地址")
                    .build());
        }
        return authQqRequest;
    }

    public static void main(String[] args) {
        Vertx vertx = Vertx.vertx();
        Router router = Router.router(vertx);
        router.get("/comm/user/callback").blockingHandler(context -> {
            HttpServerRequest req = context.request();
            AuthCallback callback = new AuthCallback();
            callback.setCode(req.getParam("code"););
            callback.setState(req.getParam("state"));
            AuthRequest authRequest = createAuthRequest();
            AuthResponse auRes = authRequest.login(callback);
            HttpServerResponse res = context.response();
            res.putHeader("Content-Type","text/json;charset=utf-8");
            res.end(JSONUtil.toJsonStr(auRes));
        });
        router.get("/login").blockingHandler(context -> {
            String url = createAuthRequest().authorize(AuthStateUtils.createState());
            HttpServerResponse res = context.response();
            res.putHeader("location",url);
            res.setStatusCode(302);
            res.end();
        });
        HttpServer httpServer = vertx.createHttpServer();
        httpServer.requestHandler(router::accept);
        httpServer.listen(8886);
    }
}代碼很好理解,主要可以分為以下幾個步驟構建一個QQ登錄的工具類,監聽兩個路由當我們訪問/login的時候,生成登錄地址,並且重定向到登錄地址當我們登錄之後,系統跳往回調地址,即/comm/user/callback,在這裡我們獲取參數code和state封裝成AuthCallback對象,執行登錄方法登錄成功後會返回用戶信息,格式如下:登錄成功後返回的用戶信息需要註意的是:創建AuthQqRequest對象的時候,必須是單例,也就是說,必須保證生成登錄地址的對象的執行登錄方法的對象是同一個。

本文出自快速备案,转载时请注明出处及相应链接。

本文永久链接: https://kuaisubeian.cc/48389.html

kuaisubeian