AuthController.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. namespace App\Http\Controllers\Api\Auth;
  3. use App\Models\WechatAuth;
  4. use Illuminate\Http\Request;
  5. use App\Http\Controllers\Api\ApiBaseController;
  6. use Illuminate\Support\Facades\Validator;
  7. use App\Services\Auth\AuthService;
  8. use Illuminate\Support\Facades\Auth;
  9. use Illuminate\Support\Facades\Session;
  10. use App\Services\Common\WechatService;
  11. class AuthController extends ApiBaseController
  12. {
  13. /**
  14. * @var AuthService
  15. */
  16. protected $authService;
  17. private $wechatService;
  18. /**
  19. * LoginController constructor.
  20. * @param AuthService $authService
  21. * @param WechatService $wechatService
  22. * @param SmsService $smsService
  23. * @param GeetestService $geetestService
  24. */
  25. public function __construct(
  26. AuthService $authService,
  27. WechatService $wechatService
  28. )
  29. {
  30. $this->authService = $authService;
  31. $this->wechatService = $wechatService;
  32. }
  33. public function loginByAccount(Request $request)
  34. {
  35. //基础信息的检查
  36. $rules = [
  37. 'account' => 'required',
  38. 'password' => 'required',
  39. ];
  40. $messages = [
  41. 'account.required' => '请输入用户名',
  42. 'password.required' => '请输入密码',
  43. ];
  44. $create_data = $request->all();
  45. $validator = Validator::make($create_data, $rules, $messages);
  46. if ($validator->fails()) {
  47. $msg = $validator->errors()->all();
  48. return response()->json(['status' => 0, 'msg' => $msg[0]]);
  49. } else {
  50. if (!$member = $this->authService->loginByAccount($request->account, $request->password, $request->autoLogin)) {
  51. return $this->sendErrorResponse("账号或密码错误", []);
  52. }
  53. if ($member->status == 0) {
  54. Auth::guard('api-member')->logout();
  55. return $this->sendErrorResponse("你的账号处于封禁状态, 请联系管理员");
  56. }
  57. return response()->json([
  58. 'message' => 'Successfully created user!',
  59. ], 201);
  60. }
  61. }
  62. /**
  63. * 微信登录中转
  64. * $state 自定义参数
  65. * $url 回调地地
  66. */
  67. public function wechatAuth(Request $request)
  68. {
  69. //获取参数
  70. $app_id = subsite_config('aix.system.oauth.wechat_official.app_id');
  71. $redirect_uri = urlencode(route('api.auth.wechat_auth_back'));
  72. $url = $request->input('url', '');
  73. if (empty($url)) {
  74. return response()->json(['status' => 0, 'msg' => '请调写回调地址']);
  75. }
  76. $state = $request->input('state', '');
  77. //存参数
  78. $auth = WechatAuth::create(['url'=>$url,'state'=>$state]);
  79. //微信授权
  80. $wechat_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$app_id}&redirect_uri={$redirect_uri}&response_type=code&scope=snsapi_userinfo&state={$auth['id']}#wechat_redirect";
  81. return redirect($wechat_url);
  82. }
  83. /**
  84. * 微信回调
  85. */
  86. public function wechatAuthBack(Request $request)
  87. {
  88. //微信登录
  89. $officialAccount = $this->wechatService->getOfficialAccount();
  90. $wechatUser = $officialAccount->oauth->user()->getOriginal();
  91. //回调
  92. $id = $request->input('state');
  93. $auth = WechatAuth::where('id',$id)->first();
  94. $wechatUser['state'] = $auth['state'];
  95. unset($wechatUser['privilege']);
  96. //循环拼接表单项
  97. $formItemString = '' ;
  98. foreach ( $wechatUser as $key => $value ){
  99. $formItemString .= "<input name='{$key}' type='text' value='{$value}'/>" ;
  100. }
  101. //构造表单并跳转
  102. $content =<<<EOF
  103. <form style= 'display:none' name= 'submit_form' id= 'submit_form' action= '{$auth["url"]}' method= 'post' >
  104. { $formItemString }
  105. </form>
  106. <script type= "text/javascript" >
  107. document.submit_form.submit();
  108. </script>
  109. EOF;
  110. exit ( $content );
  111. }
  112. public function test(Request $request)
  113. {
  114. dd($request->post());
  115. }
  116. }