Operaciones básicas del proyecto ThinkPHP6 (16. parte de combate real de redis + inicio de sesión de token)

Prefacio

El inicio de sesión generalmente se puede sessionprocesar, es relativamente simple de usar, pero generalmente se usa más al webfinal. Si necesita considerar la ejecución en múltiples terminales, redis+tokenes más conveniente usarlo, ¿por qué usarlo en redislugar de usar el almacenamiento de base de datos token? Por supuesto, la base de datos se puede almacenar y el fondo puede solicitar tokencampos de consulta de la base de datos , pero si considera que la concurrencia es alta, es redismás adecuado. Generalmente, no hay muchos lugares para consultar la información del usuario y hay más casos para determinar si un usuario está conectado.

1. Genera un token único

Puede crear una nueva commonclase para poner específicamente métodos relacionados con cadenas:

<?php

namespace app\common\lib;

class Str
{
    
    
    public static function getLoginToken($string){
    
    
        // 生成 token
        $str = md5(uniqid(md5(microtime(true)), true));
        return sha1($str . $string);
    }
}

2. Configure el token y devuélvalo al front-end

En la interfaz de inicio de sesión, los parámetros son juzgados primero Si se pasan los parámetros, que. tokenSe tokenalmacenan en la generación radisy establecer el tiempo de expiración, y luego vuelven tokena la parte delantera:

// business层的登录方法
public function login($data){
    
    
	// 省略登录参数验证与数据库更新操作
	$token = Str::getLoginToken($data["phone_number"]);
	$redisData = [
		"id" => $userId,
		"username" => $username
	];
	// 保存token到redis, 有效期7天
	$res = cache(config("radis.token_pre").$token, $redisData, 7 * 24 * 3600);
	return $res ? ["token" => $token, "username" => $username] : false;
}

cacheGuardar se usa directamente aquí porque cache.phpel método se establece en el archivo de configuración. Para redisobtener más detalles, consulte el caché de configuración 3.4 redis en este artículo: Alibaba Cloud SMS combinado con redis para lograr el inicio de sesión

// controller控制器层的登录方法  调用business层的方法
$result = (new User())->login($data);
if($result){
    
    
	return show(config('status.success'), "登录成功", $result);
}else{
    
    
	return show(config('status.error'), "登录失败");
}

Una vez que la solicitud de front-end es exitosa, se obtiene tokeny luego se guarda. Cuando envíe la solicitud la próxima vez, puede llevarla al backend para realizar redisconsultas. Si tokenno existe o caduca, será interceptada por el backend.
Inserte la descripción de la imagen aquí

Sugerencias: Esto tokenno es 100% seguro, ya que si un usuario lo ha obtenido token, tokensiempre puede acceder a los datos de fondo durante el período de vigencia, lo cual también es un asunto insoluble.

Tres, interceptor de inicio de sesión (se requiere inicio de sesión / no se requiere inicio de sesión)

Para ser escrito. . .

Supongo que te gusta

Origin blog.csdn.net/zy1281539626/article/details/111330224
Recomendado
Clasificación