AuthController.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. namespace App\Http\Controllers\V1;
  3. use App\Models\Account;
  4. use App\Models\User;
  5. use Cache;
  6. use EasyWeChat\Factory;
  7. use Illuminate\Http\JsonResponse;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\Auth;
  10. use Illuminate\Support\Facades\DB;
  11. use Laravel\Socialite\Facades\Socialite;
  12. use PHPUnit\Util\Exception;
  13. use Validator;
  14. class AuthController extends Controller
  15. {
  16. public function login(Request $request)
  17. {
  18. try {
  19. $req = $request->post();
  20. $this->validate($request, [
  21. 'account' => 'required|digits:11',
  22. 'password' => 'required',
  23. 'code' => 'required',
  24. ]);
  25. $account = Account::where('account', $req['account'])
  26. ->where('status', 1)
  27. ->first();
  28. if(!$account){
  29. return $this->error('没有找到相关账号');
  30. }
  31. if(!\Hash::check($req['password'], $account->password)){
  32. return $this->error('账号或密码错误');
  33. }
  34. $user = $this->checkUser();
  35. $user->account_id = $account->id;
  36. $user->save();
  37. $token = Auth::guard('api')->fromUser($user);
  38. $user = User::with(['account'])->where('id', $user->id)->first();
  39. $data = [
  40. 'token' => "Bearer " . $token,
  41. 'user_info' => $user,
  42. ];
  43. return $this->success($data);
  44. }catch (\Exception $ex){
  45. return $this->error('账号或密码不正确,请重新输入');
  46. }
  47. }
  48. public function wechatMiniPhone(Request $request)
  49. {
  50. try{
  51. $req = $request->post();
  52. $this->validate($request, [
  53. 'encryptedData' => 'required',
  54. 'iv' => 'required',
  55. ]);
  56. $app = Factory::miniProgram(config('wechat.mini_program.default'));
  57. $user = $this->checkUser();
  58. $decryptedData = $app->encryptor->decryptData(
  59. $user->remember_token,
  60. $req['iv'],
  61. $req['encryptedData']
  62. );
  63. $account = Account::where('account', $decryptedData['phoneNumber'])
  64. ->where('status', 1)
  65. ->first();
  66. if(!$account){
  67. return $this->error('没有找到相关账号');
  68. }
  69. if($user->mobile != $decryptedData['phoneNumber']) {
  70. $user->mobile = $decryptedData['phoneNumber'];
  71. $user->account_id = $account->id;
  72. }
  73. $user->save();
  74. $token = Auth::guard('api')->fromUser($user);
  75. $user = User::with(['account'])->where('id', $user->id)->first();
  76. $data = [
  77. 'token' => "Bearer " . $token,
  78. 'user_info' => $user,
  79. ];
  80. return $this->success($data);
  81. }catch (\Exception $ex){
  82. return $this->error($ex->getMessage());
  83. }
  84. }
  85. /**
  86. * @return User|\Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
  87. * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
  88. */
  89. private function checkUser()
  90. {
  91. $req = \request()->post();
  92. $app = Factory::miniProgram(config('wechat.mini_program.default'));
  93. $data = $app->auth->session($req['code']);
  94. $user = User::where('open_id', $data['openid'])->first();
  95. if(!$user){
  96. $user = new User();
  97. $user->open_id = $data['openid'];
  98. }
  99. $user->remember_token = $data['session_key'];
  100. $user->save();
  101. return $user;
  102. }
  103. }