Browse Source

全局user注入到request

master
weigang 5 years ago
parent
commit
794f60001c
  1. 31
      app/Middleware/Auth/ApiMiddleware.php
  2. 19
      app/Middleware/Auth/UserMiddleware.php
  3. 8
      app/Model/Model.php
  4. 2
      app/Model/v3/GoodsActivity.php
  5. 15
      app/Service/v3/Implementations/CouponRecService.php
  6. 1
      app/Service/v3/Implementations/OrderOnlineService.php

31
app/Middleware/Auth/ApiMiddleware.php

@ -4,8 +4,12 @@ declare(strict_types=1);
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\ResponseInterface as HttpResponse;
use Hyperf\Utils\ApplicationContext;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Server\MiddlewareInterface;
@ -38,18 +42,17 @@ class ApiMiddleware implements MiddlewareInterface
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
if (env('APP_ENV') == 'dev' || env('APP_ENV') == 'local') {
return $handler->handle($request);
}
// 签名校验
# 获取参数
$params = $this->request->all();
# 必须参数,签名、时间戳、随机数
if (!(isset($params['sign'])&&isset($params['timestamp'])&&isset($params['rand']))) {
if (!(
isset($params['sign'])
&&isset($params['timestamp'])
&&isset($params['rand'])
) && env('APP_ENV') == 'prod') {
$content = [
"status" => 'ok',
@ -73,11 +76,27 @@ class ApiMiddleware implements MiddlewareInterface
return $this->response->json($content);
}
$this->request->user = null;
$userToken = $params['user_token'] ?? '';
if ($userToken) {
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
$exists = $ssdb->exec('exists', $userToken);
if ($exists) {
$hashIds = ApplicationContext::getContainer()->get(Hashids::class);
$user = $hashIds->decode($userToken);
$this->request->user = User::query()->find($user[0]);
}
}
return $handler->handle($request);
}
private function checkSign($params)
{
if (env('APP_ENV') != 'prod') {
return true;
}
$sign = $params['sign'];
unset($params['sign']);
$timestamp = $params['timestamp'];

19
app/Middleware/Auth/UserMiddleware.php

@ -45,10 +45,6 @@ class UserMiddleware implements MiddlewareInterface
*/
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
if (env('APP_ENV') == 'dev' || env('APP_ENV') == 'local') {
return $handler->handle($request);
}
// 校验
if (!$this->checkLogin()) {
@ -67,18 +63,15 @@ class UserMiddleware implements MiddlewareInterface
private function checkLogin()
{
return true;
$userToken = $this->request->input('user_token', '');
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
$exists = $ssdb->exec('exists', $userToken);
if (!$userToken || !$exists) {
return false;
if (env('APP_ENV') != 'prod') {
return true;
}
$hashIds = ApplicationContext::getContainer()->get(Hashids::class);
$user = $hashIds->decode($userToken);
$this->request->user = User::find($user[0]);
$user = $this->request->user;
if (is_null($user)) {
return false;
}
return true;
}

8
app/Model/Model.php

@ -12,14 +12,22 @@ declare(strict_types=1);
namespace App\Model;
use Hyperf\DbConnection\Model\Model as BaseModel;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\ModelCache\Cacheable;
use Hyperf\ModelCache\CacheableInterface;
use Hyperf\Di\Annotation\Inject;
abstract class Model extends BaseModel implements CacheableInterface
{
use Cacheable;
protected $dateFormat = 'U';
/**
* @Inject
* @var RequestInterface
*/
protected $request;
/**
* 设置表后缀
* @param string $suffix

2
app/Model/v3/GoodsActivity.php

@ -67,7 +67,7 @@ class GoodsActivity extends Model
public function getCartNumAttribute()
{
return (integer)$this->shopCartService->check($this->id);
return (integer)$this->shopCartService->check($this->request->user->id, $this->id);
}
public function getIsEffectiveAttribute()

15
app/Service/v3/Implementations/CouponRecService.php

@ -137,4 +137,19 @@ class CouponRecService implements CouponRecServiceInterface
return ['has_more_pages' => $paginate->hasMorePages(), 'coupon_list' => $couponList['data']];
}
/**
* 获取用户当前线上订单可以使用的优惠券
* 1、所有未过期额优惠券,并且满足订单的金额要求
* 2、筛选出其中当日使用过的优惠券
* 3、筛选出其中活动商品不可用的优惠券(订单中有活动商品且活动商品不可使用优惠券)
* 4、筛选出其中活动商品可用但商品的活动类型不符合优惠券活动使用类型的要求(订单中有活动商品可以用优惠券,但是活动类型type和优惠券中的available活动类型不可用)
* @param $cartIds
* @param $userId
* @param $marketId
*/
public function allForOnlineOrderAvailable($cartIds, $userId, $marketId)
{
}
}

1
app/Service/v3/Implementations/OrderOnlineService.php

@ -171,6 +171,7 @@ class OrderOnlineService implements OrderOnlineServiceInterface
$couponsActivityAvailable = Coupon::query()
->select(['id'])
->whereJsonContains('activity_available', [(string)$goods->type])
->whereJsonContains('market_ids', [(string)$goods->market_id])
->whereIn('id', $couponIds)
->get()->toArray();
$couponsActivityAvailableIds = array_values(array_column($couponsActivityAvailable, 'id'));

Loading…
Cancel
Save