visuddhinanda 2 years ago
parent
commit
06b8609aa7

+ 84 - 0
app/Http/Controllers/ForgotPasswordController.php

@@ -0,0 +1,84 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\UserInfo;
+use Illuminate\Http\Request;
+use Illuminate\Support\Str;
+use Mail;
+use App\Mail\ForgotPassword;
+
+class ForgotPasswordController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        //
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+        $user = UserInfo::where('email',$request->get('email'))->first();
+        if(!$user){
+            return $this->error('no user',404,404);
+        }
+        $resetToken = Str::uuid();
+        $user->reset_password_token = $resetToken;
+        $ok = $user->save();
+        if(!$ok){
+            return $this->error('fail on update reset_password_token',500,500);
+        }
+
+        Mail::to($request->get('email'))
+            ->send(new ForgotPassword($resetToken,$request->get('lang')));
+        if(Mail::failures()){
+            return $this->error('send email fail',[],200);
+        }
+        return $this->ok('');
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  \App\Models\UserInfo  $userInfo
+     * @return \Illuminate\Http\Response
+     */
+    public function show(UserInfo $userInfo)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\UserInfo  $userInfo
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, UserInfo $userInfo)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\UserInfo  $userInfo
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(UserInfo $userInfo)
+    {
+        //
+    }
+}

+ 88 - 0
app/Http/Controllers/ResetPasswordController.php

@@ -0,0 +1,88 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\UserInfo;
+use Illuminate\Http\Request;
+
+class ResetPasswordController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        //
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+        $user = UserInfo::where('reset_password_token',$request->get('token'))
+                        ->where('username',$request->get('username'))
+                        ->first();
+        if(!$user){
+        return $this->error('no token',404,404);
+        }
+        if(mb_strlen($request->get('password'),'UTF-8')<6){
+            return $this->error('input is invalid',402,402);
+        }
+        $user->password = md5($request->get('password'));
+        $user->reset_password_token = null;
+        $ok = $user->save();
+        if($ok){
+            return $this->ok($user);
+        }else{
+            return $this->error('fail to set password',500,500);
+        }
+
+    }
+
+    /**
+     * 根据token获取用户名.
+     *
+     * @param  string  $token
+     * @return \Illuminate\Http\Response
+     */
+    public function show($token)
+    {
+        //
+        $user = UserInfo::where('reset_password_token',$token)
+                        ->select(['username'])->first();
+        if(!$user){
+            return $this->error('no token',404,404);
+        }
+        return $this->ok($user);
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\UserInfo  $userInfo
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, UserInfo $userInfo)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\UserInfo  $userInfo
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(UserInfo $userInfo)
+    {
+        //
+    }
+}

+ 47 - 0
app/Mail/ForgotPassword.php

@@ -0,0 +1,47 @@
+<?php
+
+namespace App\Mail;
+
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Mail\Mailable;
+use Illuminate\Queue\SerializesModels;
+
+class ForgotPassword extends Mailable
+{
+    use Queueable, SerializesModels;
+
+    protected $uuid;
+    protected $lang;
+    protected $dashboard_url;
+
+    /**
+     * Create a new message instance.
+     *
+     * @return void
+     */
+    public function __construct(string $uuid,string $lang='en-US',string $dashboard=null)
+    {
+        //
+        $this->uuid = $uuid;
+        $this->lang = $lang;
+        if($dashboard && !empty($dashboard)){
+            $this->dashboard_url = $dashboard;
+        }else{
+            $this->dashboard_url = config('mint.server.dashboard_base_path');
+        }
+    }
+
+    /**
+     * Build the message.
+     *
+     * @return $this
+     */
+    public function build()
+    {
+        return $this->view('emails.reset_password.'.$this->lang)
+                    ->with([
+                        'url' => $this->dashboard_url.'/anonymous/users/reset-password/'.$this->uuid,
+                    ]);
+    }
+}

+ 13 - 0
resources/views/emails/reset_password/en-US.blade.php

@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>reset password</title>
+    </head>
+<body>
+<div>wikipali reset password</div>
+<div>We receive request of reset password. If you </div>
+<div>click link reset password</div>
+<div><a href='{{ $url }}'>{{ $url }}</a></div>
+<div>This email is sent automatically by system, please don't reply.</div>
+</body>
+</html>

+ 13 - 0
resources/views/emails/reset_password/en.blade.php

@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>reset password</title>
+    </head>
+<body>
+<div>wikipali reset password</div>
+<div>We receive request of reset password. If you </div>
+<div>click link reset password</div>
+<div><a href='{{ $url }}'>{{ $url }}</a></div>
+<div>This email is sent automatically by system, please don't reply.</div>
+</body>
+</html>

+ 14 - 0
resources/views/emails/reset_password/zh-Hans.blade.php

@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>重置密码</title>
+    </head>
+<body>
+<div>wikipali 重置密码</div>
+<div>您收到此邮件是因为有人提交了密码重置请求,如果您没有做此操作,请忽略此邮件。</div>
+<div>点击此链接重置密码。</div>
+<div><a href='{{ $url }}'>{{ $url }}</a></div>
+<div>此链接包涵重置账户密码的全部信息,请勿转发。</div>
+<div>此邮件为系统自动发送,请勿回复。</div>
+</body>
+</html>

+ 13 - 0
resources/views/emails/reset_password/zh-Hant.blade.php

@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>重置密碼</title>
+    </head>
+<body>
+<div>wikipali 重置密碼</div>
+<div>您收到此郵件是因為有人提交了密碼重置請求,如果您冇有做此操作,請忽略此郵件。</div>
+<div>點選此鏈接重置密碼。</div>
+<div><a href='{{ $url }}'>{{ $url }}</a></div>
+<div>此郵件為係統自動發送,請勿回複。</div>
+</body>
+</html>