• Laravel新增路由文件配置


    简介:

      如下,以6.0版本框架,新建一个路由文件,并且使用laravel的中间件,实现简单的登录验证。

     生成路由的流程:

      1:创建控制器文件:php artisan make:controller Admin\LoginController。
      2:创建admin.php路由文件:routes文件夹下。
      3:App\Providers\RouteServiceProvider.php 文件新增 map访问方法。
      4:创建路由中间件验证文件 app/Http/Middleware 目录下 php artisan make:middleware CheckAdmin。
      5:app/Http/Kernel.php 文件分配中间件组。

    步骤如下:

      1、先创建一个新的UserController.php控制器,直接通过指令创建。然后新增一个login()登录方法,和一个getUser()获取会员信息方法。

    php artisan make:controller User\UserController

       2、在路由目录routes下新增一个user.php路由文件。并新增相应的登录和获取会员信息的路由地址。(注意斜杠的方向

       3、在RouteServiceProvider.php路由类中进行访问指定,并且实现相应的方法。(直接参考原有的api或是web路由,复制一个然后改下名字)。

       4、为新的user路由新增一个验证中间件(比如说请求这个接口,是怎么验证,或是说应该过滤掉什么,都可以通过这个中间件来实现)。可以直接通过指令创建。

    php artisan make:middleware CheckUser

       5、通过Kernel.php路由组文件,为新增的路由分配路由组。

     如上,已经基本创建完了一个新的user路由文件。现在我们访问测试一下。

      分别访问:

        登录地址:域名/user/member/login

        会员信息:域名/user/member/getUser

     如上已经基本上完成了新的路由的创建,那么我们如何通过中间件来实现验证和登录呢。

    --------------------------------------------------------------------------------------------------------华丽的分割线---------------------------------------------------------------------------------------------------

    实现简单的登录验证:

      1:为中间件添加验证逻辑,我们使除了登录方法login()不需要验证token,其他方法都需要验证token。

      2:为控制器添加通过账户加密码登录获取的token方法。

    具体如下:

      1、改写中间件,添加验证。

    <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    use Illuminate\Support\Facades\Redis;
    
    class CheckUser
    {
        //定义一个访问白名单
        private $whiteList = [
            '/user/member/login',//会员登录接口
        ];
    
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
            //如果在白名单的,不需要验证
            if($this->checkWhiteList()){
                return $next($request);
            }
            //验证token
            // $token = $request->header("Authorization", "");
            $token = $request->get("Authorization", "");//token一般是放在header头部,这里为了方便测试通过get传入
            $this->checkToken($token);
            return $next($request);
        }
    
        // 判断是否在白名单内
        public function checkWhiteList()
        {
            $url = substr(url()->current(), strlen(url()->previous()));//获取相对路径 如:/user/member/login
            return in_array($url, $this->whiteList);
        }
    
        //验证token
        public function checkToken($token)
        {
            if(empty($token)){
                exit('请传入token');
            }
            //验证token
            $user = Redis::get($token);
            if(empty($user)){
                exit('token有误');
            }
            //验证通过
        }
    }

      2、为控制器添加登录方法,和通过获取到的token取的会员信息的方法。

    <?php
    
    namespace App\Http\Controllers\User;
    
    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    use Validator;
    use Illuminate\Support\Facades\Redis;
    
    class UserController extends Controller
    {
        //会员登录
        public function login(Request $request)
        {
            // 字段验证
            $rules = [
                'user' => 'required|string',
                'pass' => 'required|string',
            ];
            $validator = Validator::make($request->all(), $rules);
            if($validator->fails()){
                return $validator->errors()->first();
            }
            if($request->input('user') != 'Tom' || $request->input('pass') != '123456'){
                return '账户或密码有误';
            }
            //简写
            //验证成功,生成token
            $token = md5($request->input('user').$request->input('pass'));
            if(Redis::exists($token)){//放入redis缓存
                echo '已登录token=';
            }else{
                $user = [
                    'user' => $request->input('user'),
                    'time' => date('Y-m-d H:i:s'),
                    'ip' => $request->ip(),
                ];
                Redis::set($token, json_encode($user), 60 * 60 *48);
                echo '登录成功token=';
            }
            return $token;
        }
    
        //获取会员信息
        public function getUser(Request $request)
        {
            // $token = $request->header("Authorization", "");
            $token = $request->get("Authorization", "");//token一般是放在header头部,这里为了方便测试通过get传入
            //获取登录信息
            $user_info = Redis::get($token);
            dump(json_decode($user_info));
            return $request->getRequestUri();
        }
    }

    如上,即完成一个简单的登录,我们通过账户Tom和密码123456来测试线。

     结束,如上信息是存在Redis缓存中,注意本地是否有连接Redis。


    -----END

    影子是一个会撒谎的精灵,它在虚空中流浪和等待被发现之间;在存在与不存在之间....
  • 相关阅读:
    idea 导入spring 源码注意的问题
    如何在plsql/developer的命令窗口执行sql脚本
    使用babel把es6代码转成es5代码
    解决es6中webstrom不支持import的一个简单方法
    nodejs npm insttall 带不带-g这个参数的区别
    nodejs 喜欢报cannot find module .....的简单解决方案
    用npm安装express时报proxy的错误的解决方法
    angularjs的验证信息的写法
    Emacs as a Python IDE(转)
    消息摘要java.security.MessageDigest
  • 原文地址:https://www.cnblogs.com/camg/p/15788543.html
Copyright © 2020-2023  润新知