1. 程式人生 > >二維碼登入(三)掃碼登入

二維碼登入(三)掃碼登入

承接上篇部落格,在進行二維碼生成之後,app進行掃碼,掃碼成功之後,手機點選登入,進行繫結登入關係,後臺做自動關聯與自動登入。

1,掃碼登入頁面

此頁面是模擬app登入頁面,功能是掃到二維碼後,自動跳轉授權頁面,授權成功,呼叫後臺服務進行登入關係繫結

                      

程式碼:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
<!DOCTYPE html>

<html lang="en">
<head>
    <title>翼龍貸APP授權</title>
    <script type="text/javascript" src="../../common/js/jquery-3.3.1.min.js" ></script>

    <script type="text/javascript" >
        var code_mark='${code_mark}';
        var userid="xvshu_test_001";

        function qr_login(){
            $.get("/qr/login/success?code_mark="+code_mark+"&userID="+userid,function(data,status){
                if(status=="success"&&data=="success"){
                    alert("使用者[xvshu_test_001]授權登入成功!");
                    window.location.href="/qr/login/main";
                }
            });
        }
    </script>
    <style>

        .dow{display:block;width:302px;height:82px; line-height:52px; text-align:center; font-weight:bold; font-size:35px; background:cornflowerblue;color:white; text-decoration:none; border: 0px solid cornflowerblue; cursor:pointer}
        .dow:hover{background:cornflowerblue;}
        .dow:active{background:cornflowerblue;}

    </style>

</head>

<body style="margin: 0">


    <div style="width: 100%;height: 30%;background-color:red;text-align: center">
        <div style="width: 100%;height: 25%;background-color:red;text-align: center"></div>
        <h1 style="font-size: 35px;color: white;margin:auto;">模擬APP授權</h1>
        <p></p>
        <div style="color:white;text-align: center;">測試使用者:xvshu_test_001</div>
    </div>

    <div style="width:100%;height:78%;text-align: center;background-color:white;text-align: center">
        <div style="width: 100%;height: 25%;background-color:white;text-align: center"></div>
        <p></p>
        <button  style="margin:auto;"  class="dow" onclick="qr_login()">登    錄</button>
    </div>


</body>

</html>


2,後臺自動登入服務

此服務是接受app傳送來的請求,繫結生成二維碼時的key與此時登入的使用者的關係,已在前篇文章列程式碼,此處僅標誌關鍵程式碼:

@RequestMapping(value = "/login/success")
    @ResponseBody
    public String success(String code_mark,String userID) {
        String result = "fail";
        if(StringUtils.isNotEmpty(code_mark)&&StringUtils.isNotEmpty(userID)){
            redisQRService.setQRKey(code_mark,userID);
            logger.info("=/login/success=>code_mark:{} userID:{}",code_mark,userID);
            result="success";
        }
        return result;
    }

3,自動登入

在二維碼頁面,每隔三秒檢測一次是否登入成功,如果成功跳轉頁面,已在前篇文章列程式碼,此處僅標誌關鍵程式碼:

function check_qrlogin(){
            var code_mark='${code_mark}';
            $.get("/qr/login/check?code_mark="+code_mark,function(data,status){
                if(status=="success"&&data!='nouser'){
                    int=window.clearInterval(int);
                    window.location.href="/qr/login/main?userId="+data;
                }
            });
        }

成功之後的頁面:

                              

總結:至此,一個簡單的二維碼登入就完成了,此處有很多使用的還是測試資料,在生產環境對接生產資料,並做閘道器等安全處理之後就 可以使用其完成二維碼登入了,因為全程使用的redis,效能上一般會非常不錯,文章多有不周,請大家指正。