AuthController.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. namespace Modules\User\Http\Controllers;
  3. use Catch\Base\CatchController as Controller;
  4. use Catch\Exceptions\FailedException;
  5. use Illuminate\Foundation\Validation\ValidatesRequests;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Auth;
  8. use Illuminate\Support\Facades\Event;
  9. use Illuminate\Support\Facades\Hash;
  10. use Modules\User\Events\Login;
  11. use Modules\User\Models\User;
  12. class AuthController extends Controller
  13. {
  14. use ValidatesRequests;
  15. /**
  16. * @param Request $request
  17. * @return array
  18. */
  19. public function login(Request $request): array
  20. {
  21. /* @var User $user */
  22. $user = User::query()->where('email', $request->get('email'))->first();
  23. Event::dispatch(new Login($request, $user));
  24. if ($user && Hash::check($request->get('password'), $user->password)) {
  25. $token = $user->createToken('token')->plainTextToken;
  26. return compact('token');
  27. }
  28. throw new FailedException('登录失败!请检查邮箱或者密码');
  29. }
  30. /**
  31. * logout
  32. *
  33. * @return array
  34. */
  35. public function logout(): array
  36. {
  37. /* @var User $user */
  38. $user = Auth::guard(getGuardName())->user();
  39. $user->currentAccessToken()->delete();
  40. return [];
  41. }
  42. /***
  43. * 发送邮件验证码
  44. * name: sendCode
  45. * date 2023/04/14 14:41
  46. */
  47. public function sendCode(Request $request)
  48. {
  49. $email = $request->input('email', "");
  50. if (empty($email)) {
  51. throw new FailedException('请输入邮箱!');
  52. }
  53. $user = User::query()->where('email', $email)->first();
  54. if(empty($user)){
  55. throw new FailedException('正确请输入邮箱!');
  56. }
  57. $code = random(6, true);
  58. cache([$email => $code], 120);
  59. $param = [
  60. 'subject' => "重置密码验证",
  61. 'body' => "验证码为:{$code},您正在进行登录密码重置,验证码2分钟内有效,泄露验证码会影响您的账号安全,如果不是本次操作请忽略本次邮件!"
  62. ];
  63. sendEmail( [[ 'address' =>$email, 'name' => $user->username]],$param);
  64. return response()->json(['code' => 10000, "message" => "发送成功",'data' => []]);
  65. }
  66. /**
  67. * 重置密码
  68. */
  69. public function reSetPassword(Request $request)
  70. {
  71. $this->validate($request, [
  72. 'email' => 'required',
  73. 'code' => 'required',
  74. 'password' => 'required|string|min:6',
  75. 'password_confirmation' => 'required|string|same:password'
  76. ],['email' => "邮箱不能为空",'code' => "验证码不能为空",'password'=>"密码不能为空",'password_confirmation' => "两次输入密码不一致"]);
  77. $email = $request->input('email', "");
  78. $code = $request->input('code', "");
  79. $password = $request->input('password');
  80. if(cache($email) != $code){
  81. throw new FailedException('验证码不正确或已过期!');
  82. }
  83. $user = User::query()->where('email', $email)->first();
  84. if(empty($user)){
  85. throw new FailedException('正确请输入邮箱!');
  86. }
  87. $password = bcrypt($password);
  88. $res = User::query()->where('id',$user->id)->update(['password' => $password]);
  89. return response()->json(['code' => 10000, "message" => "操作成功",'data' => []]);
  90. }
  91. }