EmailController.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. namespace App\Http\Controllers\Account;
  3. use App\Models\EmailToken;
  4. use App\Models\User;
  5. use Illuminate\Contracts\Auth\Guard;
  6. use Illuminate\Http\Request;
  7. use App\Http\Requests;
  8. use App\Http\Controllers\Controller;
  9. class EmailController extends Controller
  10. {
  11. protected $auth;
  12. public function __construct(Guard $auth){
  13. $this->auth = $auth;
  14. }
  15. /*验证邮箱token*/
  16. public function verifyToken($action,$token)
  17. {
  18. $emailToken = EmailToken::where('action','=',$action)->where('token','=',$token)->first();
  19. if(!$emailToken){
  20. return $this->error(route('website.ask'),'token信息不存在');
  21. }
  22. if($emailToken->created_at->diffInMinutes() > 60){
  23. return $this->error(route('website.ask'),'token信息已失效,请重新发送');
  24. }
  25. $user = User::where('email','=',$emailToken->email)->first();
  26. if(!$user){
  27. return $this->error(route('website.ask'),'用户不存在或已被删除');
  28. }
  29. if(in_array($action,['register','verify'])){
  30. if($user->status==0){
  31. $user->status=1;
  32. $user->save();
  33. $user->userData->email_status = 1;
  34. $user->userData->save();
  35. }
  36. $this->auth->login($user);
  37. EmailToken::clear($user->email,$action);
  38. return $this->success(route('auth.profile.base'),'邮箱验证成功');
  39. }
  40. }
  41. public function sendToken(Request $request)
  42. {
  43. $lastEmailToken = EmailToken::where('email','=',$request->user()->email)->orderBy('created_at','DESC')->first();
  44. if($lastEmailToken && $lastEmailToken->created_at->diffInMinutes() < 1)
  45. {
  46. return response('tooFast');
  47. }
  48. $emailToken = EmailToken::create([
  49. 'email' => $request->user()->email,
  50. 'action' => 'verify',
  51. 'token' => EmailToken::createToken(),
  52. ]);
  53. if($emailToken){
  54. $subject = '请激活您在 '.Setting()->get('website_name').' 的邮箱!';
  55. $content = "「".$request->user()->name."」您好,请激活您在 ".Setting()->get('website_name')." 的邮箱!<br /> 请在1小时内点击该链接激活注册账号 → ".route('auth.email.verifyToken',['action'=>$emailToken->action,'token'=>$emailToken->token])."<br />如非本人操作,请忽略此邮件!";
  56. $this->sendEmail($emailToken->email,$subject,$content);
  57. return response('success');
  58. }
  59. return response('failed');
  60. }
  61. }