SiteController.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <?php
  2. namespace api\modules\v1\controllers;
  3. use Yii;
  4. use yii\web\NotFoundHttpException;
  5. use common\helpers\ResultHelper;
  6. use common\helpers\ArrayHelper;
  7. use common\models\member\Member;
  8. use api\modules\v1\forms\UpPwdForm;
  9. use api\controllers\OnAuthController;
  10. use api\modules\v1\forms\LoginForm;
  11. use api\modules\v1\forms\RefreshForm;
  12. use api\modules\v1\forms\MobileLogin;
  13. use api\modules\v1\forms\SmsCodeForm;
  14. use api\modules\v1\forms\RegisterForm;
  15. use common\models\extend\SmsLog;
  16. use common\enums\MemberTypeEnum;
  17. /**
  18. * 登录接口
  19. *
  20. * Class SiteController
  21. * @package api\modules\v1\controllers
  22. * @author jianyan74 <751393839@qq.com>
  23. */
  24. class SiteController extends OnAuthController
  25. {
  26. public $modelClass = '';
  27. /**
  28. * 不用进行登录验证的方法
  29. *
  30. * 例如: ['index', 'update', 'create', 'view', 'delete']
  31. * 默认全部需要验证
  32. *
  33. * @var array
  34. */
  35. protected $authOptional = ['login', 'refresh', 'mobile-login', 'sms-code', 'register', 'up-pwd'];
  36. /**
  37. * 登录根据用户信息返回accessToken
  38. *
  39. * @return array|bool
  40. * @throws NotFoundHttpException
  41. * @throws \yii\base\Exception
  42. */
  43. public function actionLogin()
  44. {
  45. $model = new LoginForm();
  46. $model->attributes = Yii::$app->request->post();
  47. if ($model->validate()) {
  48. // 记录登录行为
  49. Yii::$app->services->member->lastLogin($model->getUser());
  50. // 登录
  51. Yii::$app->user->login($model->getUser());
  52. // 记录行为日志
  53. Yii::$app->services->actionLog->create('login', '登录', 0, [], false);
  54. return Yii::$app->services->apiAccessToken->getAccessToken($model->getUser(), $model->group);
  55. }
  56. // 返回数据验证失败
  57. return ResultHelper::json(422, $this->getError($model));
  58. }
  59. /**
  60. * 登出
  61. *
  62. * @return array|mixed
  63. */
  64. public function actionLogout()
  65. {
  66. if (Yii::$app->services->apiAccessToken->disableByAccessToken(Yii::$app->user->identity->access_token)) {
  67. return ResultHelper::json(200, '退出成功');
  68. }
  69. return ResultHelper::json(422, '退出失败');
  70. }
  71. /**
  72. * 重置令牌
  73. *
  74. * @param $refresh_token
  75. * @return array
  76. * @throws NotFoundHttpException
  77. * @throws \yii\base\Exception
  78. */
  79. public function actionRefresh()
  80. {
  81. $model = new RefreshForm();
  82. $model->attributes = Yii::$app->request->post();
  83. if (!$model->validate()) {
  84. return ResultHelper::json(422, $this->getError($model));
  85. }
  86. return Yii::$app->services->apiAccessToken->getAccessToken($model->getUser(), $model->group);
  87. }
  88. /**
  89. * 手机验证码登录Demo
  90. *
  91. * @return array|mixed
  92. * @throws \yii\base\Exception
  93. */
  94. public function actionMobileLogin()
  95. {
  96. $model = new MobileLogin();
  97. $model->attributes = Yii::$app->request->post();
  98. if ($model->validate()) {
  99. return Yii::$app->services->apiAccessToken->getAccessToken($model->getUser(), $model->group);
  100. }
  101. // 返回数据验证失败
  102. return ResultHelper::json(422, $this->getError($model));
  103. }
  104. /**
  105. * 获取验证码
  106. *
  107. * @return int|mixed
  108. * @throws \yii\web\UnprocessableEntityHttpException
  109. */
  110. public function actionSmsCode()
  111. {
  112. $model = new SmsCodeForm();
  113. $model->attributes = Yii::$app->request->post();
  114. if (!$model->validate()) {
  115. return ResultHelper::json(422, $this->getError($model));
  116. }
  117. // 测试
  118. if (YII_DEBUG) {
  119. $code = rand(1000, 9999);
  120. $log = new SmsLog();
  121. $log = $log->loadDefaultValues();
  122. $log->attributes = [
  123. 'mobile' => $model->mobile,
  124. 'code' => $code,
  125. 'member_id' => 0,
  126. 'usage' => $model->usage,
  127. 'error_code' => 200,
  128. 'error_msg' => '测试',
  129. 'error_data' => '',
  130. ];
  131. $log->save();
  132. return ResultHelper::json(200, '发送成功', [
  133. 'code' => $code
  134. ]);
  135. }
  136. return $model->send();
  137. }
  138. /**
  139. * 注册
  140. *
  141. * @return array|mixed
  142. * @throws \yii\base\Exception
  143. */
  144. public function actionRegister()
  145. {
  146. $model = new RegisterForm();
  147. $model->attributes = Yii::$app->request->post();
  148. if (!$model->validate()) {
  149. return ResultHelper::json(422, $this->getError($model));
  150. }
  151. $member = new Member();
  152. $member->attributes = ArrayHelper::toArray($model);
  153. $member->type = MemberTypeEnum::MEMBER;
  154. $member->merchant_id = Yii::$app->services->merchant->getNotNullId();
  155. $member->password_hash = Yii::$app->security->generatePasswordHash($model->password);
  156. if (!$member->save()) {
  157. return ResultHelper::json(422, $this->getError($member));
  158. }
  159. return Yii::$app->services->apiAccessToken->getAccessToken($member, $model->group);
  160. }
  161. /**
  162. * 密码重置
  163. *
  164. * @return array|mixed
  165. * @throws \yii\base\Exception
  166. */
  167. public function actionUpPwd()
  168. {
  169. $model = new UpPwdForm();
  170. $model->attributes = Yii::$app->request->post();
  171. if (!$model->validate()) {
  172. return ResultHelper::json(422, $this->getError($model));
  173. }
  174. $member = $model->getUser();
  175. $member->password_hash = Yii::$app->security->generatePasswordHash($model->password);
  176. if (!$member->save()) {
  177. return ResultHelper::json(422, $this->getError($member));
  178. }
  179. return Yii::$app->services->apiAccessToken->getAccessToken($member, $model->group);
  180. }
  181. /**
  182. * 权限验证
  183. *
  184. * @param string $action 当前的方法
  185. * @param null $model 当前的模型类
  186. * @param array $params $_GET变量
  187. * @throws \yii\web\BadRequestHttpException
  188. */
  189. public function checkAccess($action, $model = null, $params = [])
  190. {
  191. // 方法名称
  192. if (in_array($action, ['index', 'view', 'update', 'create', 'delete'])) {
  193. throw new \yii\web\BadRequestHttpException('权限不足');
  194. }
  195. }
  196. }
粤ICP备19079148号