Auth.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. /*
  8. * @Author: your name
  9. * @Date: 2021-03-02 09:50:20
  10. * @LastEditTime: 2021-04-29 14:40:28
  11. * @LastEditors: Please set LastEditors
  12. * @Description: In User Settings Edit
  13. * @FilePath: \admin_php\modules\client\behaviors\Auth.php
  14. */
  15. namespace app\modules\alliance\behaviors;
  16. use app\models\SaasUser;
  17. use app\models\User;
  18. use yii\base\ActionFilter;
  19. use Yii;
  20. use yii\base\BaseObject;
  21. use yii\helpers\Json;
  22. use yii\web\Response;
  23. /**
  24. * Class Auth
  25. * @package app\modules\client\behaviors
  26. */
  27. class Auth extends ActionFilter
  28. {
  29. // 不验证登录白名单
  30. const ALLOW_LIST = [
  31. 'alliance/store/search-params',
  32. //'alliance/user/index',
  33. 'alliance/default/store',
  34. 'alliance/diy/index',
  35. 'alliance/default/coupon-list',
  36. 'alliance/diy/goods',
  37. 'alliance/diy/goods',
  38. 'alliance/default/topic-type',
  39. 'alliance/diy/mch',
  40. 'alliance/default/topic-list',
  41. 'alliance/passport/login',
  42. 'alliance/diy/template-unit',
  43. 'alliance/diy/template',
  44. 'alliance/passport/login',
  45. 'alliance/passport/send-code',
  46. 'alliance/user/user-empower',
  47. 'alliance/user/user-binding',
  48. 'alliance/upload/upload-image',
  49. 'alliance/upload/upload-video',
  50. 'alliance/diy/shop',
  51. 'alliance/default/cat-list',
  52. 'alliance/default/goods-list',
  53. 'alliance/goods/goods',
  54. 'alliance/default/browse',
  55. 'alliance/goods/address',
  56. 'alliance/goods/goods-recommend',
  57. 'alliance/goods/mch-recommend',
  58. 'alliance/default/comment-list',
  59. 'alliance/goods/get-goods-youhui',
  60. 'alliance/default/goods-attr-info',
  61. 'alliance/mch/index/location-info',
  62. 'alliance/default/district',
  63. 'alliance/mch/index/mch-list',
  64. 'alliance/mch/index/shop',
  65. 'alliance/shop/nearby',
  66. 'alliance/default/get-brand-list',
  67. 'alliance/cart/list',
  68. 'alliance/goods/guess-like',
  69. 'alliance/default/buy-data',
  70. 'alliance/passport/auth-phone',
  71. 'alliance/store/list',
  72. 'alliance/store/search-params',
  73. 'alliance/passport/platform-auth-phone',
  74. 'alliance/alipay/passport/auth',
  75. 'alliance/alipay/passport/phone',
  76. 'alliance/saas/search-keyword',
  77. 'alliance/saas/add-history',
  78. 'alliance/diy/new-index',
  79. 'alliance/diy/store-info',
  80. 'alliance/diy/system-template-list',
  81. 'alliance/goods/new-goods-recommend',
  82. 'alliance/default/article-detail',
  83. 'alliance/default/location-content',
  84. 'alliance/store/mp-audit',
  85. 'alliance/store/server-mp-audit',
  86. 'alliance/new-merchant/face-pay-config',
  87. 'alliance/new-merchant/face-pay',
  88. 'alliance/store/goods_list',
  89. 'alliance/saas/fpay',
  90. 'alliance/new-merchant/get-give-integral',
  91. 'alliance/default/store-info',
  92. 'alliance/saas/check-favorite',
  93. 'alliance/merchant/merchant-info/index',
  94. 'alliance/passport/code',
  95. 'alliance/default/saas-coupon-list',
  96. 'alliance/store-activity/get-district-list',
  97. 'alliance/store-activity/activity-goods-list'
  98. ];
  99. public function beforeAction($action)
  100. {
  101. if (get_params('version')) {
  102. $mini_type = get_params('mini_type');
  103. if (isset($mini_type) && $mini_type == 'merchant') {
  104. $version = get_params('version');
  105. $cache = cacheLock();
  106. $key = 'store_merchant_version';
  107. if (!cache_lock($key . '_time', 60 * 5)) {
  108. $cache->set($key, $version);
  109. }
  110. }
  111. }
  112. $access_token = input_params('access_token');
  113. if (!$access_token && in_array(Yii::$app->controller->getRoute(), self::ALLOW_LIST)) {
  114. return true;
  115. }
  116. // 支付宝依然取user表数据
  117. // if (input_params('platform') == 'alipay') {
  118. // $user = User::findIdentityByAccessToken($access_token);
  119. // if ($user) {
  120. // \Yii::$app->jwt->setUser($user);
  121. // } else {
  122. // \Yii::$app->response->format = Response::FORMAT_JSON;
  123. // \Yii::$app->response->data = [
  124. // 'code' => 401,
  125. // 'msg' => '登陆失败'
  126. // ];
  127. // return false;
  128. // }
  129. // } else {
  130. // 微信平台目前统一走saas_user表,统一用户
  131. $saas_user = SaasUser::findIdentityByAccessToken($access_token);
  132. if (empty($access_token) && $saas_user) {
  133. \Yii::$app->response->format = Response::FORMAT_JSON;
  134. \Yii::$app->response->data = [
  135. 'code' => 401,
  136. 'msg' => '登录失败'
  137. ];
  138. return false;
  139. }
  140. if ($saas_user) {
  141. \Yii::$app->jwt->setSaasUser($saas_user);
  142. if (input_params('store_id') > 0) {
  143. $user = User::findOne(['binding' => $saas_user->mobile, 'store_id' => input_params('store_id')]);
  144. if (!$user) {
  145. try {
  146. $user = new User();
  147. $user->access_token = \Yii::$app->security->generateRandomString();
  148. $user->binding = $saas_user->mobile;
  149. $user->type = User::USER_TYPE_NORMAL;
  150. $user->nickname = substr_replace($saas_user->mobile, '******', 3, 6);
  151. $user->avatar_url = \Yii::$app->request->hostInfo . \Yii::$app->request->baseUrl . '/web/v1/statics/images/avatar.png';
  152. $user->username = \Yii::$app->security->generateRandomString();
  153. $user->password = \Yii::$app->security->generatePasswordHash(\Yii::$app->security->generateRandomString(), 5);
  154. $user->auth_key = \Yii::$app->security->generateRandomString();
  155. $user->is_delete = User::USER_NOT_DELETE;
  156. $user->store_id = input_params('store_id');
  157. $user->platform = input_params('platform') == 'alipay'?User::USER_FROM_ALIPAY:User::USER_FROM_WECHAT; // 微信
  158. $user->save();
  159. } catch (\Exception $e){}
  160. }
  161. if (!$user) {
  162. $user = User::findOne(['binding' => $saas_user->mobile, 'store_id' => input_params('store_id')]);
  163. }
  164. \Yii::$app->jwt->setUser($user);
  165. }
  166. } else {
  167. \Yii::$app->response->format = Response::FORMAT_JSON;
  168. \Yii::$app->response->data = [
  169. 'code' => 401,
  170. 'msg' => '登录失败'
  171. ];
  172. return false;
  173. }
  174. return true;
  175. }
  176. }