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。