redis + token login
Prefacio
El inicio de sesión generalmente se puede session
procesar, es relativamente simple de usar, pero generalmente se usa más al web
final. Si necesita considerar la ejecución en múltiples terminales, redis+token
es más conveniente usarlo, ¿por qué usarlo en redis
lugar de usar el almacenamiento de base de datos token
? Por supuesto, la base de datos se puede almacenar y el fondo puede solicitar token
campos de consulta de la base de datos , pero si considera que la concurrencia es alta, es redis
má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 common
clase 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. token
Se token
almacenan en la generación radis
y establecer el tiempo de expiración, y luego vuelven token
a 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;
}
cache
Guardar se usa directamente aquí porquecache.php
el método se establece en el archivo de configuración. Pararedis
obtener 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 token
y luego se guarda. Cuando envíe la solicitud la próxima vez, puede llevarla al backend para realizar redis
consultas. Si token
no existe o caduca, será interceptada por el backend.
Sugerencias: Esto
token
no es 100% seguro, ya que si un usuario lo ha obtenidotoken
,token
siempre 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. . .