Browse Source

user token的雏形

master
weigang 6 years ago
parent
commit
070bdc5678
  1. 18
      app/Middleware/Auth/UserMiddleware.php
  2. 12
      app/Service/v3/Implementations/WxLoginService.php
  3. 8
      config/autoload/auth.php
  4. 1
      config/config.php

18
app/Middleware/Auth/UserMiddleware.php

@ -2,8 +2,12 @@
namespace App\Middleware\Auth; namespace App\Middleware\Auth;
use App\Model\v3\User;
use App\TaskWorker\SSDBTask;
use Hashids\Hashids;
use Hyperf\HttpServer\Contract\RequestInterface as HttpRequest; use Hyperf\HttpServer\Contract\RequestInterface as HttpRequest;
use Hyperf\HttpServer\Contract\ResponseInterface as HttpResponse; use Hyperf\HttpServer\Contract\ResponseInterface as HttpResponse;
use Hyperf\Utils\ApplicationContext;
use Psr\Container\ContainerInterface; use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ServerRequestInterface;
@ -33,6 +37,7 @@ class UserMiddleware implements MiddlewareInterface
$this->container = $container; $this->container = $container;
$this->response = $response; $this->response = $response;
$this->request = $request; $this->request = $request;
make(Hashids::class, ['secret' => config('auth.user.hash_ids_secret')]);
} }
/** /**
@ -63,5 +68,18 @@ class UserMiddleware implements MiddlewareInterface
private function checkLogin() private function checkLogin()
{ {
return true; return true;
$userToken = $this->request->input('user_token', '');
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
$exists = $ssdb->exec('exists', $userToken);
if (!$userToken || !$exists) {
return false;
}
$hashIds = ApplicationContext::getContainer()->get(Hashids::class);
$user = $hashIds->decode($userToken);
$this->request->user = User::find($user[0]);
return true;
} }
} }

12
app/Service/v3/Implementations/WxLoginService.php

@ -35,20 +35,24 @@ class WxLoginService implements \App\Service\v3\Interfaces\WxLoginServiceInterfa
)->toArray(); )->toArray();
// 登录成功 // 登录成功
$hash = new Hashids(config('hash_ids_secret'));
$hashIds = $hash->encode((int)$user['id']);
$hash = ApplicationContext::getContainer()->get(Hashids::class);
$hashIds = $hash->encode((int)$user['id'], time());
$user['user_token'] = $hashIds; $user['user_token'] = $hashIds;
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
$ssdb->exec('setnx', $hashIds, 1);
$ssdb->exec('expire', $hashIds, config('auth.user.expire_time'));
$return = array_merge($user, $result); $return = array_merge($user, $result);
$kvs = []; $kvs = [];
foreach ($return as $k => $v) { foreach ($return as $k => $v) {
$kvs[] = $k; $kvs[] = $k;
$kvs[] = $v; $kvs[] = $v;
} }
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
$ssdb->exec('multi_hset', SsdbKeys::USER_INFO.$user['id'], $kvs); $ssdb->exec('multi_hset', SsdbKeys::USER_INFO.$user['id'], $kvs);
return $user;
return $return;
} }
public function check($userId) public function check($userId)

8
config/autoload/auth.php

@ -7,8 +7,12 @@ declare(strict_types=1);
return [ return [
'api' => [ 'api' => [
'sign' => [ 'sign' => [
'secret_key' => 'lanzu@123',
'expire_time' => 200
'secret_key' => env('API_AUTH_SECRET'),
'expire_time' => env('API_AUTH_EXPIRE_TIME')
] ]
], ],
'user' => [
'hash_ids_secret' => env('HASH_IDS_SECRET'),
'expire_time' => env('HASH_IDS_EXPIRE_TIME')
]
]; ];

1
config/config.php

@ -52,5 +52,4 @@ return [
'alioss' => [ 'alioss' => [
'img_host' => env('OSS_IMG_HOST', ''), 'img_host' => env('OSS_IMG_HOST', ''),
], ],
'hash_ids_secret' => env('HASH_IDS_SECRET'),
]; ];
Loading…
Cancel
Save