laravel5.3注册 登录 退出登录 邮箱找回密码 操作--邮箱找回密码

laravel5.3注册 登录 退出登录 邮箱找回密码 操作–邮箱找回密码

0,找回密码的逻辑
  1. 通过邮箱把找回密码的页面发送至用户输入的邮箱里面。
  2. 发送邮件时,通过用户填写的邮件信息,去数据库对应的查询这个用户的id,以及token。在重置用户密码的控制器中使用。
  3. 发送成功以后引导用户登录此邮箱。
  4. 登录成功后邮箱里面有对应的找回密码的链接。此路由需要携带此用户的id,token,通过点击这个链接,跳转至找回密码的路由。由此路由返回找回密码页面。
  5. 通过控制器接收路由传递的参数,进行给用户重置密码操作。
  6. 重置成功以后token重新生成,防止恶意攻击。
1,找回密码路由
//找回密码,发送邮件
    Route::match(['get','post'],'retrieve','LoginController@retrieve');
//修改密码
    Route::match(['get','post'],'editPwd/{id}/{token}','LoginController@editPwd');    
2,发送邮件,重置密码,控制器
<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Mail;
class LoginController extends Controller{
  
   public function retrieve(Request $request){
        if ($request->isMethod('GET')){
            return view('admin.registerLogin');
        }else{
            //接收全部数据
            $value = $request->all();
            //验证规则
            $rules = [
              'email'=>'required|email',
              'code'=>'required|captcha'
            ];
            //提示信息
            $message = [
              'email.required'=>'邮箱不能为空',
              'email'=>'邮箱格式不正确',
              'code.required'=>'验证码不能为空',
              'code.captcha'=>'验证码不正确'
            ];
            //返回
            $validator = \Validator::make($value,$rules,$message);
            if ($validator->passes()){
                $email = $request->input('email');
                $result = DB::table('user')->where('email','=',$email)->first();
                if ($result){
                    //发送验证码
                    Mail::send('mail.retrieve',['id'=>$result->id,'token'=>$result->token],function($message) use ($email){
                        $message->to($email);
                        $message->subject('找回密码');
                    });
                    //返回邮件地址,跳转到找回密码页面
                    $mail_arr = explode('@',$_POST['email']);
                    $href = "mail.".$mail_arr[1];
                    $data = [
                        'status'=>'200',
                        'href'=>$href,
                        'info'=>'发送成功'
                    ];
                    return $data;
                }else{
                    $data = [
                      'status'=>'5',
                      'info'=>'邮箱不存在,请重新输入'
                    ];
                    return $data;
                }
            }else{
                return response()->json([
                    'status'=>'4',
                    'info'=>$validator->errors()->first()
                ]);
            }
        }
    }
//重置密码,从邮箱过来的页面
    public function editPwd($id,$token,Request $request){
        if ($request->isMethod('GET')){
            //TODO <winner remarks>把get请求时传递的id,token返回,用于在editPwd视图中ajax请求时使用此参数
            return view('admin.editPwd')->with(['id'=>$id,'token'=>$token]);
        }else{
            //验证请求的数据
            //接收全部数据
            $values = $request->request->all();
            //定义规则
            $rules = [
              'email'=>'required|email',
              'pwd'=>'required|same:repwd',
              'code'=>'required|captcha'
            ];
            $message = [
              'email.required'=>'邮箱不能为空',
              'email'=>'邮箱格式不正确',
              'pwd.required'=>'密码不能为空',
              'pwd.same'=>'两次密码不一致',
              'code.required'=>'验证码不能为空',
              'code.captcha'=>'验证码不正确'
            ];
            $validator = \Validator::make($values,$rules,$message);
            if ($validator->passes()){
                $email = $request->input('email');
                //echo $id.'--'.$token.'--'.$email;die();//TODO <winner remarks>在这里没办法直接使用editPwd()里面的$id,$token因为那是get请求传递的参数,这里是ajax请求过来的数据,需要在editPwd视图页面中的ajax请求地址那里面传递参数,这里才能接收到。
                //再次验证用户是否存在
                $result = DB::table('user')->where([['id','=',$id],['email','=',$email],['token','=',$token]])->first();
                //var_dump($result);die();
                if ($result){
                    //去数据库修改密码
                    //定义要修改数据的数组
                    $data = array();
                    //让token过期,防止恶意操作
                    $data['token'] = str_random(50);
                    $data['pwd'] = md5(md5($_POST['pwd']));
                    $edit_pwd = \DB::table('user')->where([['id','=',$id],['email','=',$email],['token','=',$token]])->update($data);
                    if ($edit_pwd){
                        $data = [
                            'status'=>'200',
                            'info'=>'找回成功,请登录',
                            'href'=>'http://www.hh.com/login'
                        ];
                        return $data;
                    }else{
                        $data = [
                            'status'=>'203',
                            'info'=>'修改失败',
                            'href'=>'http://www.hh.com/login'
                        ];
                        return $data;
                    }
                }else{
                    $data = [
                        'status'=>'202',
                        'info'=>'用户数据有误,重新操作',
                        'href'=>'http://www.hh.com/retrieve'
                    ];
                    return $data;
                }
            }else{
                return response()->json([
                    'status'=>'201',
                    'info'=>$validator->errors()->first()
                ]);
            }
        }
    }
}    
3,重置密码控制器

在这里插入图片描述
在这里插入图片描述

因为涉及到的视图页面过多,我就不再这里贴出来了。我压一下包,传上来,大家有需要的可以下载。核心代码都已经全部贴在上方了。下载链接
作为一名程序员,也有困境的时候,也需要一些心灵的鸡汤,大家可以关注我的公众号。跟我一起喝鸡汤。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值