Lumen企业站内容管理实战 - 后台管理之认证二

后台管理之认证二

上篇文章写的是用JWT做的认证,对于不是前后端分离的情况,其实是不合适的,这次试用基于cookie的认证实现后台管理认证。

第一步:打开/routes/web.php文件,在$router->group()参数中,增加一个:'middleware' => 'auth.admin',middleware的值你可以自己命名,我这里叫做auth.admin。

 第二步:打开/bootstrap/app.php文件,增加路由中间件

 $app->routeMiddleware([
     'auth.admin' => App\Http\Middleware\AdminAuthenticate::class,
 ]);

 注意,auth.admin一定要和路由中的auth.admin对应上,不然不会起作用的

为了用户的信息在cookie中是安全的,我们使用加解密功能,这个功能需要手动打开,在这个app.php文件中,增加代码

$app->register(Illuminate\Encryption\EncryptionServiceProvider::class);

加了它还不行,因为配置文件还没有做,必须设置一个key,你就随机生成一个32位长度的key,然后把可以放到.env文件中的APP_KEY后面

然后在app.php文件中,引入/config/app.php文件

$app->configure('app'); // 引入/config/app.php文件中的配置信息

第三步:在/app/Http/Middleware/目录下,新建文件AdminAuthenticate.php文件,内容如下

<?php

namespace App\Http\Middleware;

use App\Admin;
use Closure;
use Illuminate\Support\Facades\Crypt;

class AdminAuthenticate
{

    public function handle($request, Closure $next, $guard = 'admin')
    {

        try{

            // 在登录的时候,把用户的ID进行加密后放到cookie中。这里是验证,取出coolie解密。如果解密失败,会抛出异常
            $adminId = Crypt::decrypt($_COOKIE['user_id']);

            $adminInfo = \App\Models\Admin::find($adminId);

            // 检查用户是否存在
            if(empty($adminInfo->id)){
                Throw new \Exception('账号错误');
            }

            // 检查启用状态
            if($adminInfo->state != 1){
                Throw new \Exception('请联系管理员');
            }

        }catch (\Exception$e){

            // 出错后,可以跳转到错误页面,也可直接返回错误信息

            $arrayResult['code'] = 401;
            $arrayResult['message'] = $e->getMessage();
            $arrayResult['data'] = [];

            return response()->json($arrayResult, 401)->setEncodingOptions(JSON_UNESCAPED_UNICODE);
        }

        // $next不能少
        return $next($request);
    }
}

第四步:在用户登录的时候

// 取出用户的ID,对ID进行加密,然后存到coolkie中
setcookie('user_id',Crypt::encrypt($admin->id), time() + 36000);

结束。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangpeng52758

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值