猿问

Laravel 不返回第一次返回

当我在另一个类中扩展 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 !响应请给我一些建议


繁星coding
浏览 111回答 2
2回答

慕尼黑的夜晚无繁华

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

aluckdog

虽然将令牌验证问题分开是一个好主意,但在构造函数中做这样的事情并不是一个好习惯,更不用说将它隐藏在基类的构造函数中了。一般来说,构造函数应该用于构造对象,而不是“做事”。因为你想return早点,从控制器中提取这个问题有点复杂。但这就是中间件的用途。查看有关创建自己的中间件的 Laravel 文档(尽管您尝试做的事情可能已经内置)一个示例中间件类可能如下所示:<?phpnamespace App\Http\Middleware;use Closure;class CheckToken{&nbsp; &nbsp; /**&nbsp; &nbsp; &nbsp;* Handle an incoming request and check the token.&nbsp; &nbsp; &nbsp;*&nbsp; &nbsp; &nbsp;* @param&nbsp; \Illuminate\Http\Request&nbsp; $request&nbsp; &nbsp; &nbsp;* @param&nbsp; \Closure&nbsp; $next&nbsp; &nbsp; &nbsp;* @return mixed&nbsp; &nbsp; &nbsp;*/&nbsp; &nbsp; public function handle($request, Closure $next)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; if (...) { //your token check&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return ...; // your early-returned json.&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return $next($request); //otherwise continue&nbsp; &nbsp; }}
随时随地看视频慕课网APP
我要回答