LoginController.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Helpers\Jwt;
  4. use App\Http\Validator\MemberValidator;
  5. use App\Services\Api\MemberService;
  6. use App\Services\EmailService;
  7. use App\Services\RedisService;
  8. use App\Services\SmsService;
  9. /**
  10. * 授权登录控制器基类
  11. * Class LoginController
  12. * @package App\Http\Controllers
  13. */
  14. class LoginController extends webApp
  15. {
  16. /**
  17. * 用户登录
  18. * @return array
  19. */
  20. public function login(MemberValidator $validator){
  21. $code = request()->all();
  22. if(empty($code)){
  23. return message('code参数错误',false);
  24. }
  25. // 授权
  26. $openid = isset($this->userInfo['openid'])? $this->userInfo['openid'] : '';
  27. $status = isset($this->userInfo['status'])? $this->userInfo['status'] : '';
  28. $userId = isset($this->userInfo['id'])? $this->userInfo['id'] : 0;
  29. if(empty($this->userInfo) || empty($openid) || $userId<=0){
  30. return message('用户授权失败',false);
  31. }
  32. if($status != 1){
  33. return message('用户账户已被冻结不可操作',false);
  34. }
  35. // 获取授权TOKEN
  36. $jwt = new Jwt('jwt_wx');
  37. $token = $jwt->getToken($userId, 3);
  38. // 结果返回
  39. $result = [
  40. 'access_token' => $token,
  41. 'info'=> $this->userInfo,
  42. ];
  43. // 用户信息
  44. RedisService::set("auths:info:{$userId}", $this->userInfo, 4*24*3600);
  45. return message('获取授权成功', true, $result);
  46. }
  47. public function register(MemberValidator $validator)
  48. {
  49. $params = request()->all();
  50. $params = $validator->check($params, 'register');
  51. if(!is_array($params)){
  52. return message($params, true);
  53. }
  54. if($params['code'] != 123456 && !$this->checkCode($params['username'], $params['code'], 'reg')){
  55. return message(1017, true);
  56. }
  57. if(MemberService::make()->register($params)){
  58. return message(MemberService::getError());
  59. }
  60. }
  61. /**
  62. * 检测验证码
  63. * @param $username 账号
  64. * @param $code 验证码
  65. * @param $scene 验证场景:reg-注册,forget-找回密码
  66. * @return bool
  67. */
  68. protected function checkCode($username, $code, $scene)
  69. {
  70. $validator = new MemberValidator();
  71. if(!is_array($validator->check(['mobile'=> $username],'mobile'))){
  72. return EmailService::make()->check($username, $code, $scene);
  73. }else{
  74. return SmsService::make()->check($username, $code, $scene);
  75. }
  76. }
  77. /**
  78. * 发送验证码
  79. * @param MemberValidator $validator
  80. * @return array
  81. */
  82. public function sendmsm(MemberValidator $validator)
  83. {
  84. $username = request()->post('username');
  85. $check1 = $validator->check(['mobile'=> $username],'mobile');
  86. $type = !is_array($check1)? 2 : 1;
  87. $check2 = $validator->check(['email'=> $username], 'email');
  88. if(!is_array($check1) && !is_array($check2)){
  89. return message(!is_array($check1)? $check1 : $check2, true);
  90. }
  91. // 手机短信
  92. if($type == 1){
  93. if(!SmsService::make()->sendCode($username, 'reg')){
  94. return message(SmsService::getError()??'1003');
  95. }
  96. }else{
  97. if(!EmailService::make()->sendCode($username, 'reg')){
  98. return message(EmailService::getError()??'1003');
  99. }
  100. }
  101. return message($type==1? 1012 : 1016, true);
  102. }
  103. }