我如何使用jwt.auth中间件将标记传递给不在主体中的标头:laravel 5.6

问题描述 投票:0回答:1

我使用post man来测试我的api,所以当我在标题中发送令牌时,我得到的令牌没有提供,但是当我以json格式将它传递给body时,我得到了一个成功的结果,所以当我通过时我希望得到成功的结果我在标题中的标记

我怎么能做这个改变?

这是我的邮政公司控制器

class CompaniesController extends Controller
{
    public function index(Request $request)
    {
        # code...
        //  $Ads = ads::all();
        //  return $this->sendResponse($Ads->toArray(), 'Ads read succesfully');
        // This is the name of the column you wish to search
        $input = $request->all();
        $validator =    Validator::make($input, [
            'user_id'=> 'required'
        ] );

        $Companies = Companies::where('user_id','=', $request->user_id)->first();

        return response()->json(['Companies'=>$Companies]);
    }

    public function stockcompanies (Request $request){
        $input = $request->all();

        $validator =    Validator::make($input, [
            'title'=> 'required',
            'description'=> 'required',
            'logo_path'=> 'image|nullable|max:1999'
        ] );


        $user_id = Auth::id();
        if($request->hasFile('logo_path')){
            // Get filename with the extension
            $filenameWithExt = $request->file('logo_path')->getClientOriginalName();
            // Get just filename
            $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
            // Get just ext
            $extension = $request->file('logo_path')->getClientOriginalExtension();
            // Filename to store
            $fileNameToStore= $filename.'_'.time().'.'.$extension;
            // Upload Image
            $path = $request->file('logo_path')->storeAs('public/cover_images', $fileNameToStore);
        } else {
            $fileNameToStore = 'noimage.jpg';
        }
        if ($validator -> fails()) {
            # code...
            return response()->json($validator->errors());
        }

        //$Cards = CreditCards::create($input,$user_id);
        $companies = Companies::create([
            'title' => $request->get('title'),
            'description' => $request->get('description'),
            'logo_path' => $fileNameToStore,
            'user_id' => $user_id
        ]);
        return response()->json(['Companies'=>$companies]);
    }
}

这是我的api:

Route::group(['middleware' => ['jwt.auth']], function() {
        Route::post('postmycompanies', 'CompaniesController@stockcompanies');
        Route::get('test', function(){
        return response()->json(['foo'=>'bar']);
});
php laravel laravel-5 jwt laravel-5.6
1个回答
1
投票

我解决了我的问题:我使用自定义中间件

namespace App\Http\Middleware;

use Closure;
use JWTAuth;
use Exception;
use Tymon\JWTAuth\Http\Middleware\BaseMiddleware;

class JwtMiddleware extends BaseMiddleware
{

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        try {
            $user = JWTAuth::parseToken()->authenticate();
        } catch (Exception $e) {
            if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenInvalidException){
                return response()->json(['status' => 'Token is Invalid']);
            }else if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenExpiredException){
                return response()->json(['status' => 'Token is Expired']);
            }else{
                return response()->json(['status' => 'Authorization Token not found']);
            }
        }
        return $next($request);
    }
}

接下来,我们需要注册我们的中间件。打开app / http / Kernel.php并添加以下内容:

[...]
protected $routeMiddleware = [
    [...]
    'jwt.verify' => \App\Http\Middleware\JwtMiddleware::class,
];
[...]

接下来,打开routes / api.php并添加以下内容:

 Route::group(['middleware' => ['jwt.verify']], function() {
         Route::post('postmycompanies', 'CompaniesController@stockcompanies');
    });
© www.soinside.com 2019 - 2024. All rights reserved.