在現代社群網路和電商平台上,快速方便的登入方式是吸引使用者的重要手段之一。掃一掃登入就是其中一種簡單、快速、安全的方式。本文將介紹如何使用 PHP 實作掃一掃登入。
一、掃一掃登入的原理
掃一掃登入是指使用者開啟指定的 App 或掃描二維碼後,將訊息傳送到伺服器。伺服器透過判斷資訊的合法性,然後傳回一個憑證(令牌),用於完成登入驗證。
二、實作過程
在進行掃描登入之前,需要先準備以下工作:
需要使用對應的函式庫來產生圖片。本文使用 PHP QR Code 產生二維碼。
include "phpqrcode.php"; QRcode::png($data, $filename, $errorCorrectionLevel, $matrixPointSize, 2);
產生二維碼一般需要傳入一個資料(data),該資料可以是一個連結或一個字串。例如:
$data = "https://example.com/?token=xxxxxx"; QRcode::png($data, "qrcode.png", QR_ECLEVEL_L, 10, 2);
我們需要保證產生的令牌是唯一的,並且有效期短,以確保安全性。可以考慮使用 jwt (JSON Web Token) 產生令牌。實作程式碼如下:
// 生成令牌 $secret_key = "your-secret-key"; $header = '{"alg":"HS256","typ":"JWT"}'; $payload = '{"sub":"1234567890","name":"John Doe","iat":1516239022}'; $jwt = base64_encode($header) . "." . base64_encode($payload); $jwt .= "." . hash_hmac('sha256', $header . '.' . $payload, $secret_key, true);
此處僅為實作說明,實際開發中需要根據實際情況選擇合適的加密演算法和金鑰。
驗證二維碼的步驟如下:
驗證過程的具體實作如下:
// php 获取 POST 参数 $uuid = $_POST['uuid']; // 根据 uuid 查询数据库 if (检查 uuid 是否存在 && 检查 uuid 是否有效) { // 生成令牌 $token = 生成令牌; // 保存到数据库 保存 token 到数据库; // 返回给客户端 echo $token; }
客戶端取得到伺服器傳回的token 後,可以使用JWT (JSON Web Token)函式庫解析token。解析出的內容可以帶有使用者資訊和其他相關驗證資訊。根據實際情況設定有效期限和其他安全驗證,確保 token 不會被惡意使用。範例如下:
// 解析 token $jwt = $_GET['jwt']; [$header, $payload, $signature] = explode(".", $jwt); $jwt_hash = hash_hmac('sha256', $header . '.' . $payload, $secret_key, true); if (base64_decode($signature) == $jwt_hash) { // 有效的 token }
三、總結
本文介紹了使用PHP 實作掃一掃登入的基本流程:產生二維碼、驗證令牌、驗證二維碼、驗證token,從而實現掃一掃登入的功能。整個過程需要注意安全性和正確性。在實際開發中,需要考慮更多的因素,例如產生二維碼的顯示方式、是否需要授權、令牌有效期等等。
以上是php實作掃一掃登入的詳細內容。更多資訊請關注PHP中文網其他相關文章!