login redis + token
Prefácio
O login geralmente pode ser session
processado, é relativamente simples de usar, mas geralmente é mais usado no web
final. Se você precisa considerar a execução em vários terminais, redis+token
é mais conveniente usar, por que usar em redis
vez de usar o armazenamento de banco de dados token
? Obviamente, o banco de dados pode ser armazenado e o segundo plano pode solicitar token
campos de consulta do banco de dados , mas se você considerar a alta simultaneidade, é redis
mais adequado. Geralmente, não há muitos lugares para consultar as informações do usuário e há mais casos para determinar se um usuário está conectado.
1. Gere um token único
Você pode criar uma nova common
classe para colocar especificamente métodos relacionados a strings:
<?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. Defina o token e retorne-o ao front end
Na interface de login, os parâmetros são julgados primeiro. Se os parâmetros forem passados, eles token
serão token
armazenados na geração radis
e definirão o tempo de expiração, e então retornarão token
ao front end:
// 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
Salvar é usado diretamente aqui porquecache.php
o método é definido no arquivo de configuração. Para obterredis
detalhes, consulte o cache de configuração 3.4 redis neste artigo: Alibaba Cloud SMS combinado com redis para obter o login
// controller控制器层的登录方法 调用business层的方法
$result = (new User())->login($data);
if($result){
return show(config('status.success'), "登录成功", $result);
}else{
return show(config('status.error'), "登录失败");
}
Depois que a solicitação de front-end for bem-sucedida, ela será obtida token
e salva. Quando você enviar a solicitação da próxima vez, poderá trazê-la para o back-end para fazer uma redis
consulta. Se ela token
não existir ou expirar, será interceptada pelo back-end.
Dicas: Isso
token
não é 100% seguro, pois se o usuário o obtevetoken
, eletoken
sempre pode acessar os dados de background durante o período de validade.Também é uma questão insolúvel.
Três, interceptor de login (login necessário / nenhum login necessário)
Para ser escrito. . .