为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 不返回第一次返回

Laravel 不返回第一次返回

PHP
繁星coding 2022-10-22 15:53:42
当我在另一个类中扩展 ApiBaseController 时,拒绝响应令牌不起作用。即使我输入了错误的 app-token,但仍然在另一堂课上做出回应。class ApiBaseController extends Controller{    protected $user;    public function __construct()    {        if (request()->header('app-token') != 'ofdsafalkhguddskjafl01JhBF9mGx2jay'){            return response()->json([                'success'=>false,                'status'=>'401',                'message'=>'Token Denied !',                'response'=>[                    'total'=>0,                    'data'=>[]                ]            ]);        }        else{            $this->user = Auth::guard('api')->user();        }    }}即使我输入了错误的应用令牌,该课程仍然有效class AttendeesApiController extends ApiBaseController{    public function index(Request $request)    {        return Attendee::scope($this->account_id)->paginate($request->get('per_page', 25));    }}我想确保当 app-token 出错时会给出Token Denied !响应请给我一些建议
查看完整描述

2 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

处理此问题的最佳方法是将这些路由分组到中间件中,并在中间件本身中检查不记名令牌。这将使您的方法更加整洁,并且您可以轻松地在此路由中间件组中添加需要不记名令牌检查的新路由。



查看完整回答
反对 回复 2022-10-22
?
aluckdog

TA贡献1847条经验 获得超7个赞

虽然将令牌验证问题分开是一个好主意,但在构造函数中做这样的事情并不是一个好习惯,更不用说将它隐藏在基类的构造函数中了。


一般来说,构造函数应该用于构造对象,而不是“做事”。


因为你想return早点,从控制器中提取这个问题有点复杂。但这就是中间件的用途。


查看有关创建自己的中间件的 Laravel 文档(尽管您尝试做的事情可能已经内置)


一个示例中间件类可能如下所示:


<?php


namespace App\Http\Middleware;


use Closure;


class CheckToken

{

    /**

     * Handle an incoming request and check the token.

     *

     * @param  \Illuminate\Http\Request  $request

     * @param  \Closure  $next

     * @return mixed

     */

    public function handle($request, Closure $next)

    {

        if (...) { //your token check

            return ...; // your early-returned json.

        }


        return $next($request); //otherwise continue

    }

}


查看完整回答
反对 回复 2022-10-22
  • 2 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信