LoginController.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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. * LoginController constructor.
  18. */
  19. public function __construct()
  20. {
  21. parent::__construct();
  22. $this->service = new MemberService();
  23. }
  24. /**
  25. * 用户登录
  26. * @return array
  27. */
  28. public function login(MemberValidator $validator)
  29. {
  30. $params = request()->all();
  31. $params = $validator->check($params, 'login');
  32. if(!is_array($params)){
  33. return message($params, false);
  34. }
  35. if(!$result = MemberService::make()->login($params)){
  36. return message(MemberService::make()->getError(), false);
  37. }
  38. return message(2004, true, $result);
  39. }
  40. /**
  41. * 账号注册
  42. * @param MemberValidator $validator
  43. * @return array
  44. */
  45. public function register(MemberValidator $validator)
  46. {
  47. $params = request()->all();
  48. $params = $validator->check($params, 'register');
  49. if(!is_array($params)){
  50. return message($params, false);
  51. }
  52. // 验证注册来源
  53. $headers = request()->header();
  54. $host = isset($headers['host'])? $headers['host'] : '';
  55. $referer = isset($headers['referer'])? $headers['referer'] : $host;
  56. $referer = $referer? preg_replace("/^http:\/\/|https:\/\//",'', $referer) : '';
  57. $referer = isset($referer[0])? $referer[0] : '';
  58. $query = explode('.', $referer);
  59. $source = isset($query[0])? $query[0] : '';
  60. $params['user_type'] = 1;
  61. if(in_array($source, ['api','bc'])){
  62. $params['user_type'] = 5;
  63. }
  64. if($params['code'] != 123456 && !$this->checkCode($params['username'], $params['code'], 'reg')){
  65. return message($this->error, false);
  66. }
  67. if(!MemberService::make()->register($params)){
  68. return message(MemberService::make()->getError(), false);
  69. }
  70. return message(2008);
  71. }
  72. /**
  73. * 检测验证码
  74. * @param $username 账号
  75. * @param $code 验证码
  76. * @param $scene 验证场景:reg-注册,forget-找回密码
  77. * @return bool
  78. */
  79. protected function checkCode($username, $code, $scene)
  80. {
  81. $validator = new MemberValidator();
  82. if(!is_array($validator->check(['mobile'=> $username],'mobile'))){
  83. if(!EmailService::make()->check($username, $code, $scene)){
  84. $this->error = EmailService::make()->getError();
  85. return false;
  86. }
  87. return true;
  88. }else{
  89. if(!SmsService::make()->check($username, $code, $scene)){
  90. $this->error = SmsService::make()->getError();
  91. return false;
  92. }
  93. return true;
  94. }
  95. }
  96. /**
  97. * 发送验证码
  98. * @param MemberValidator $validator
  99. * @return array
  100. */
  101. public function sendmsm(MemberValidator $validator)
  102. {
  103. $username = request()->post('username');
  104. $scene = request()->post('scene','reg');
  105. $check1 = $validator->check(['mobile'=> $username],'mobile');
  106. $type = !is_array($check1)? 2 : 1;
  107. $check2 = $validator->check(['email'=> $username], 'email');
  108. if(!is_array($check1) && !is_array($check2)){
  109. return message(!is_array($check1)? $check1 : $check2, false);
  110. }
  111. // 手机短信
  112. if($type == 1){
  113. if(!SmsService::make()->sendCode($username, $scene)){
  114. return message(SmsService::make()->getError(), false);
  115. }
  116. }else{
  117. if(!EmailService::make()->sendCode($username, $scene)){
  118. return message(EmailService::make()->getError(), false);
  119. }
  120. }
  121. return message($type==1? 1012 : 1016, true);
  122. }
  123. }