PasswordController.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace App\Controllers;
  3. use App\Models\User;
  4. use App\Models\PasswordReset;
  5. use App\Services\Password;
  6. use App\Utils\Hash;
  7. /***
  8. * Class Password
  9. * @package App\Controllers
  10. * 密码重置
  11. */
  12. class PasswordController extends BaseController
  13. {
  14. public function reset()
  15. {
  16. return $this->view()->display('password/reset.tpl');
  17. }
  18. public function handleReset($request, $response, $args)
  19. {
  20. $email = $request->getParam('email');
  21. // check limit
  22. // send email
  23. $user = User::where('email', $email)->first();
  24. if ($user == null) {
  25. $rs['ret'] = 0;
  26. $rs['msg'] = '此邮箱不存在.';
  27. return $response->getBody()->write(json_encode($rs));
  28. }
  29. Password::sendResetEmail($email);
  30. $rs['ret'] = 1;
  31. $rs['msg'] = '重置邮件已经发送,请检查邮箱.';
  32. return $response->getBody()->write(json_encode($rs));
  33. }
  34. public function token($request, $response, $args)
  35. {
  36. $token = $args['token'];
  37. return $this->view()->assign('token', $token)->display('password/token.tpl');
  38. }
  39. public function handleToken($request, $response, $args)
  40. {
  41. $tokenStr = $args['token'];
  42. $password = $request->getParam('password');
  43. $repasswd = $request->getParam('repasswd');
  44. if ($password != $repasswd) {
  45. $res['ret'] = 0;
  46. $res['msg'] = "两次输入不符合";
  47. return $response->getBody()->write(json_encode($res));
  48. }
  49. if (strlen($password) < 8) {
  50. $res['ret'] = 0;
  51. $res['msg'] = "密码太短啦";
  52. return $response->getBody()->write(json_encode($res));
  53. }
  54. // check token
  55. $token = PasswordReset::where('token', $tokenStr)->first();
  56. if ($token == null || $token->expire_time < time()) {
  57. $rs['ret'] = 0;
  58. $rs['msg'] = '链接已经失效,请重新获取';
  59. return $response->getBody()->write(json_encode($rs));
  60. }
  61. $user = User::where('email', $token->email)->first();
  62. if ($user == null) {
  63. $rs['ret'] = 0;
  64. $rs['msg'] = '链接已经失效,请重新获取';
  65. return $response->getBody()->write(json_encode($rs));
  66. }
  67. // reset password
  68. $hashPassword = Hash::passwordHash($password);
  69. $user->pass = $hashPassword;
  70. $user->ga_enable = 0;
  71. if (!$user->save()) {
  72. $rs['ret'] = 0;
  73. $rs['msg'] = '重置失败,请重试';
  74. return $response->getBody()->write(json_encode($rs));
  75. }
  76. $rs['ret'] = 1;
  77. $rs['msg'] = '重置成功';
  78. $user->clean_link();
  79. return $response->getBody()->write(json_encode($rs));
  80. }
  81. }