AuthController.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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 && $user->status != 1){
  25. throw new FailedException('账号不存在或已停用!');
  26. }
  27. if ($user && Hash::check($request->get('password'), $user->password)) {
  28. $token = $user->createToken('token')->plainTextToken;
  29. return compact('token');
  30. }
  31. throw new FailedException('登录失败!请检查邮箱或者密码');
  32. }
  33. /**
  34. * logout
  35. *
  36. * @return array
  37. */
  38. public function logout(): array
  39. {
  40. /* @var User $user */
  41. $user = Auth::guard(getGuardName())->user();
  42. $user->currentAccessToken()->delete();
  43. return [];
  44. }
  45. /***
  46. * 发送邮件验证码
  47. * name: sendCode
  48. * date 2023/04/14 14:41
  49. */
  50. public function sendCode(Request $request)
  51. {
  52. $email = $request->input('email', "");
  53. if (empty($email)) {
  54. throw new FailedException('请输入邮箱!');
  55. }
  56. $user = User::query()->where('email', $email)->first();
  57. if(empty($user)){
  58. throw new FailedException('正确请输入邮箱!');
  59. }
  60. $code = random(6, true);
  61. cache([$email => $code], 120);
  62. $param = [
  63. 'subject' => "重置密码验证",
  64. 'body' => "验证码为:{$code},您正在进行登录密码重置,验证码2分钟内有效,泄露验证码会影响您的账号安全,如果不是本次操作请忽略本次邮件!"
  65. ];
  66. sendEmail( [[ 'address' =>$email, 'name' => $user->username]],$param);
  67. return response()->json(['code' => 10000, "message" => "发送成功",'data' => []]);
  68. }
  69. /**
  70. * 重置密码
  71. */
  72. public function reSetPassword(Request $request)
  73. {
  74. $this->validate($request, [
  75. 'email' => 'required',
  76. 'code' => 'required',
  77. 'password' => 'required|string|min:6',
  78. 'password_confirmation' => 'required|string|same:password'
  79. ],['email' => "邮箱不能为空",'code' => "验证码不能为空",'password'=>"密码不能为空",'password_confirmation' => "两次输入密码不一致"]);
  80. $email = $request->input('email', "");
  81. $code = $request->input('code', "");
  82. $password = $request->input('password');
  83. if(cache($email) != $code){
  84. throw new FailedException('验证码不正确或已过期!');
  85. }
  86. $user = User::query()->where('email', $email)->first();
  87. if(empty($user)){
  88. throw new FailedException('正确请输入邮箱!');
  89. }
  90. $password = bcrypt($password);
  91. $res = User::query()->where('id',$user->id)->update(['password' => $password]);
  92. return response()->json(['code' => 10000, "message" => "操作成功",'data' => []]);
  93. }
  94. }