Illuminate\Http\Request, string given.

6

我已经创建了一个新的中间件来检查用户令牌,我创建了中间件并将其添加到kernal.php中,但是当我尝试在中间件中访问$request时,我收到了错误信息。

这是我中间件的代码:

namespace App\Http\Middleware;
use Illuminate\Http\Request;
use Closure;
use App\User;

class CheckToken
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {

        if($request->header('Token') == '123')
        {
            return ['status' =>2, 'msg' => 'Unathorized'];
        }
        else
        {
            return $next($request);
         }

    }
}

这是我的内核文件

 protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'verifyToken' => \App\Http\Middleware\CheckToken::class,
    ];

我遇到了这个错误

Argument 1 passed to Illuminate\Routing\Middleware\ThrottleRequests::addHeaders() must be an instance of Symfony\Component\HttpFoundation\Response, instance of Illuminate\Http\Request given, called in C:\xampp\htdocs\idoltime\vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php on line 62

尝试清除 Laravel 日志文件,最近我被这种情况欺骗了,发现单日日志文件有 70k+ 行的条目。 - Dinesh Suthar
4个回答

12

您可以使用

// return $request;
if($request->header('Token') == '123')
{
        $response = [
            'status' => 2,
            'message' => 'Unauthorized',
        ];

        return response()->json($response, 413);
}
else
{
        return $next($request);
}

0

我遇到了同样的问题,但在互联网上没有找到任何答案。这里是我解决这个问题的方法。

步骤1:为示例创建单独的路由

Route::get('header_token', function() {
  return response()->json(['status' =>2, 'msg' => 'Unathorized']);
})->name('header_token');

步骤2:重定向到header_token路由

请记住,您不能将数据作为响应返回,因此请返回一个将返回您数据的路由

public function handle($request, Closure $next)
{

    if($request->header('Token') == '123')
    {
        return redirect(route('header_token'));
    }
    else
    {
        return $next($request);
    }

}

0
if (auth()->user()) {
    return $next($request);
}else{
    return JsonResponse::respondError("you are not active email");
}

-2

我是这样解决这个问题的

exit(response()->json( json_encode(['message' => 'Text']), 403) );

echo() - var_dump() - print() - print_r() - also works too...

Абдушакур Савзаев,请用英语回答,因为Stack Overflow是一个仅限英语的网站 - Yunnosch
1
欢迎来到Stack Overflow!虽然这段代码可能解决了问题,但是包括解释它如何以及为什么解决了问题将有助于提高您的帖子质量,并可能导致更多的赞。请记住,您正在回答未来读者的问题,而不仅仅是现在提问的人。请[编辑]您的答案以添加解释并指出适用的限制和假设。 - Yunnosch
你的回答可以通过添加更多支持信息来改进。请[编辑]以添加进一步的细节,例如引文或文献资料,以便他人能够确认你的回答是否正确。您可以在帮助中心中找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接