OauthController.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: leo
  5. * Date: 2018/2/24
  6. * Time: 下午12:48
  7. */
  8. namespace frontendApi\modules\v1\controllers;
  9. use common\helpers\Cache;
  10. use common\helpers\Form;
  11. use common\models\forms\UserForm;
  12. use common\models\UserInfo;
  13. use common\models\UserToken;
  14. use frontendApi\modules\v1\components\UserAuth;
  15. use frontendApi\modules\v1\models\LoginForm;
  16. use Yii;
  17. use frontendApi\modules\v1\models\User;
  18. use yii\web\HttpException;
  19. class OauthController extends BaseController
  20. {
  21. public $modelClass = User::class;
  22. public function actionMenu(){
  23. $menu = require Yii::getAlias('@frontendApi/config/menu.php');
  24. return $this->_childMenu($menu);
  25. }
  26. private function _childMenu($parentArray){
  27. $menuResult = [];
  28. foreach($parentArray as $key => $parentMenu){
  29. // 菜单是否显示
  30. if(isset($parentMenu['show']) && (!$parentMenu['show'] || !$this->_allowDec($parentMenu))){
  31. continue;
  32. }
  33. // 子菜单同样设置
  34. if(isset($parentMenu['child']) && !empty($parentMenu['child'])){
  35. $parentMenu['child'] = $this->_childMenu($parentMenu['child']);
  36. }
  37. $menuResult[] = $parentMenu;
  38. }
  39. return $menuResult;
  40. }
  41. private function _allowDec($item){
  42. if(!isset($item['allow'])){
  43. return true;
  44. }
  45. $isDecReg = Cache::getSystemConfig()['isDecReg']['VALUE'];
  46. if(!$isDecReg) return true;
  47. if(!\Yii::$app->user->id){
  48. return true;
  49. }
  50. $isDec = User::getEnCodeInfo(\Yii::$app->user->id)['IS_DEC'];
  51. if($isDec==1 && $item['allow']=='declarer'){
  52. return true;
  53. }
  54. return false;
  55. }
  56. /**
  57. * 个人信息
  58. * @return mixed
  59. * @throws HttpException
  60. */
  61. public function actionInfo(){
  62. User::updateBaseInfoToRedis(\Yii::$app->user->id);
  63. return static::notice(User::getEnCodeInfo(\Yii::$app->user->id));
  64. }
  65. /**
  66. * 登录是否需要验证码
  67. * @return mixed
  68. * @throws HttpException
  69. */
  70. public function actionIsLoginVerify() {
  71. $userName = Yii::$app->request->post('userName');
  72. $model = new LoginForm(
  73. [
  74. 'userName' =>$userName
  75. ]
  76. );
  77. $isLoginVerify = $model->isLoginVerify();
  78. return static::notice($isLoginVerify ? 1 : 0);
  79. }
  80. /**
  81. * 登录
  82. * @return mixed
  83. * @throws HttpException
  84. * @throws \yii\base\Exception
  85. */
  86. public function actionLogin() {
  87. $userName = Yii::$app->request->post('userName');
  88. $model = new LoginForm(
  89. [
  90. 'userName' =>$userName
  91. ]
  92. );
  93. if ( $model->isLoginVerify() ) {
  94. $model->scenario = 'loginVerify';
  95. }else {
  96. $model->scenario = 'login';
  97. }
  98. if ($model->load(Yii::$app->request->post(), '') && $model->login()) {
  99. $token = Yii::$app->getUser()->getToken();
  100. return static::notice($token);
  101. } else {
  102. $firstError = $model->getFirstError('LoginForm');
  103. if( $firstError === LoginForm::ERROR_IS_MODIFY_PASSWORD ) {
  104. return static::notice(LoginForm::ERROR_IS_MODIFY_PASSWORD, 403);
  105. }
  106. return static::notice(Form::formatErrorsForApi($model->getErrors()), 401);
  107. }
  108. }
  109. /**
  110. * 用refreshToken刷新accessToken和refreshToken
  111. * @return mixed
  112. * @throws HttpException
  113. */
  114. public function actionRefreshToken(){
  115. $refreshToken = Yii::$app->request->get('refresh-token');
  116. Yii::$app->user->refreshToken($refreshToken);
  117. $token = Yii::$app->getUser()->getToken();
  118. if($token){
  119. return static::notice($token);
  120. } else {
  121. return static::notice('更新Token失败', 401);
  122. }
  123. }
  124. /**
  125. * 用refreshToken刷新accessToken
  126. * @return mixed
  127. * @throws HttpException
  128. */
  129. public function actionRefreshAccessToken(){
  130. $refreshToken = Yii::$app->request->get('refresh-token');
  131. Yii::$app->user->refreshAccessToken($refreshToken);
  132. $token = Yii::$app->getUser()->getToken();
  133. if($token){
  134. return static::notice($token);
  135. } else {
  136. return static::notice('更新Token失败', 401);
  137. }
  138. }
  139. /**
  140. * 用refreshToken刷新refreshToken
  141. * @return mixed
  142. * @throws HttpException
  143. */
  144. public function actionRefreshRefreshToken(){
  145. $refreshToken = Yii::$app->request->get('refresh-token');
  146. Yii::$app->user->refreshRefreshToken($refreshToken);
  147. $token = Yii::$app->getUser()->getToken();
  148. if($token){
  149. return static::notice($token);
  150. } else {
  151. return static::notice('更新Token失败', 401);
  152. }
  153. }
  154. /**
  155. * 后台登录前台
  156. * @return mixed
  157. * @throws HttpException
  158. */
  159. public function actionLoginByBackend(){
  160. if(Yii::$app->user->validateBackendAuth()){
  161. $userId = Yii::$app->request->post('id');
  162. if($result = Yii::$app->user->loginByBackend($userId)){
  163. return static::notice($result);
  164. }
  165. }
  166. return static::notice('Illegal request', 400); // 非法请求
  167. }
  168. /**
  169. * @return mixed
  170. * @throws HttpException
  171. */
  172. public function actionNoLoginModifyPassword() {
  173. if(\Yii::$app->request->isPost){
  174. $form = new UserForm();
  175. $form->scenario = 'noLoginModifyPassword';
  176. $post = \Yii::$app->request->post();
  177. if($form->load($post, '') && $result = $form->noLoginModifyPassword()){
  178. return static::notice('密码修改成功');
  179. } else {
  180. return static::notice(Form::formatErrorsForApi($form->getErrors()), 400);
  181. }
  182. }
  183. return static::notice('Illegal request', 400); // 非法请求
  184. }
  185. }