PasswordController.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace App\Controllers;
  3. use App\Models\PasswordReset;
  4. use App\Models\User;
  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. // check token
  44. $token = PasswordReset::where('token', $tokenStr)->first();
  45. if ($token == null || $token->expire_time < time()) {
  46. $rs['ret'] = 0;
  47. $rs['msg'] = '链接已经失效,请重新获取';
  48. return $response->getBody()->write(json_encode($rs));
  49. }
  50. $user = User::where('email', $token->email)->first();
  51. if ($user == null) {
  52. $rs['ret'] = 0;
  53. $rs['msg'] = '链接已经失效,请重新获取';
  54. return $response->getBody()->write(json_encode($rs));
  55. }
  56. // reset password
  57. $hashPassword = Hash::passwordHash($password);
  58. $user->pass = $hashPassword;
  59. if (!$user->save()) {
  60. $rs['ret'] = 0;
  61. $rs['msg'] = '重置失败,请重试';
  62. return $response->getBody()->write(json_encode($rs));
  63. }
  64. $rs['ret'] = 1;
  65. $rs['msg'] = '重置成功';
  66. return $response->getBody()->write(json_encode($rs));
  67. }
  68. }