我的設計是:uniapp連接GatewayWorker時,GatewayWorker返回驗證信息【auth、client_id、timestamp】,設置未綁定超時關閉;
uniapp請求頭攜帶token,數(shù)據(jù)報文為上一步的驗證信息,請求thinkPHP業(yè)務系統(tǒng);
thinkPHP業(yè)務系統(tǒng),在鑒權成功后,通過GatewayClient綁定用戶id、加入分組、關閉連接等等操作。
auth的意義其實是簽名,表示在時間戳timestamp,有client_id進行連接;
相當于Session的概念。
thinkphp業(yè)務系統(tǒng),在做綁定uid或者加入分組時,一定要驗證這個auth值。
/**
* 將client_id與uid綁定
* @param string $client_id
* @param string $uid
* @param string $auth
* @return void
* @throws Exception
*/
public static function bindUid(string $client_id, string $uid, string $auth): bool
{
if (empty($auth) || strlen($auth) < 32) {
throw new Exception('auth驗證參數(shù)為空');
}
$session = Gateway::getSession($client_id);
$_auth = $session['auth'] ?? $session['uniqid'] ?? '';
if (empty($_auth)) {
throw new Exception('session驗證參數(shù)為空');
}
if (hash_equals($auth, $_auth)) {
Gateway::bindUid($client_id, $uid);
return true;
}
return false;
}