AuthController.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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. $app = Factory::miniProgram(config('wechat.mini_program.default'));
  35. $data = $app->auth->session($req['code']);
  36. $user = User::where('open_id',$data['openid'])->first();
  37. $user->account_id = $account->id;
  38. $user->save();
  39. $token = Auth::guard('api')->fromUser($user);
  40. $user = User::with(['account'])->where('id', $user->id)->first();
  41. $data = [
  42. 'token' => "Bearer " . $token,
  43. 'user_info' => $user,
  44. ];
  45. return $this->success($data);
  46. }catch (\Exception $ex){
  47. return $this->error('账号或密码不正确,请重新输入');
  48. }
  49. }
  50. public function wechatMiniCode(Request $request): JsonResponse
  51. {
  52. try {
  53. $req = $request->post();
  54. $this->validate($request, [
  55. 'code' => 'required',
  56. ]);
  57. $app = Factory::miniProgram(config('wechat.mini_program.default'));
  58. $data = $app->auth->session($req['code']);
  59. $user = User::where('open_id',$data['openid'])->first();
  60. if(!$user){
  61. $user = new User();
  62. $user->open_id = $data['openid'];
  63. }
  64. $user->remember_token = $data['session_key'];
  65. $user->save();
  66. return $this->success();
  67. }catch (\Exception $ex){
  68. return $this->error($ex->getMessage());
  69. }
  70. }
  71. public function wechatMiniPhone(Request $request)
  72. {
  73. try{
  74. $req = $request->post();
  75. $this->validate($request, [
  76. 'encryptedData' => 'required',
  77. 'iv' => 'required',
  78. ]);
  79. $app = Factory::miniProgram(config('wechat.mini_program.default'));
  80. $user = \user()->makeVisible('remember_token');
  81. $decryptedData = $app->encryptor->decryptData($user['remember_token'], $req['iv'], $req['encryptedData']);
  82. $account = Account::where('account', $decryptedData['phoneNumber'])
  83. ->where('status', 1)
  84. ->first();
  85. if(!$account){
  86. return $this->error('没有找到相关账号');
  87. }
  88. $user = User::where('id', $user['id'])->first();
  89. if($user->mobile != $decryptedData['phoneNumber']) {
  90. $user->mobile = $decryptedData['phoneNumber'];
  91. $user->account_id = $account->id;
  92. $user->save();
  93. }
  94. $token = Auth::guard('api')->fromUser($user);
  95. $user = User::with(['account'])->where('id', $user->id)->first();
  96. $data = [
  97. 'token' => "Bearer " . $token,
  98. 'user_info' => $user,
  99. ];
  100. return $this->success($data);
  101. }catch (\Exception $ex){
  102. return $this->error($ex->getMessage());
  103. }
  104. }
  105. }