繁体   English   中英

是否可以在不使用护照的情况下使用 api 中的用户使用 laravel 默认身份验证

[英]is it possible to get the user in api without using passport using laravel default auth

我有一个单片应用程序。 现在我想在我的应用程序中获取经过身份验证的user ,就像 2 apis一样。 我知道我可以使用 laravel passport来生成令牌并获取user ,但我想知道是否也可以在 api 的网站上获取经过身份验证的user 现在在我的api controller 中,当我dd()以下选项时,我得到 null:

    dd(auth()->user());
    dd(auth('api')->user());
    dd(Auth::user());

我正在使用 laravel fortify进行用户登录。

我有同样的问题。 所以我创建了中间件,如果 Bearer 令牌存在,你可以使用 Auth::user 获取用户,如果没有 Bearer Token,应用程序在没有身份验证的情况下仍然可以工作。 下面的中间件与 Auth & Unauth 一起工作。

<?php

namespace App\Http\Middleware;

use App\Models\User;
use Carbon\Carbon;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Lcobucci\JWT\Configuration;

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

        $value = $request->bearerToken(); // Get auth token

        if(!$value) { // Stop auth if token not sent
            return $next($request);
        }

        $parser = Configuration::forUnsecuredSigner()->parser();//new \Lcobucci\JWT\Token\Parser();
        $token = $parser->parse($value); // Parse token

        if($token->isExpired(Carbon::now())) { // Check token is expired
            return $next($request);
        }

        if(@ !$id = $token->claims()->all()['jti']) {// Get user ID
            return $next($request);
        }

        $data = DB::table('oauth_access_tokens') // Check id is valid
        ->select('user_id')
            ->where('id', $id)
            ->first();

        if($data) { // If oauth_access_tokens record is exists
            $user = User::find($data->user_id); // Load user object model
            if($user) { // check if user found
                if($user->active) { // Check user is available
                    Auth::setUser($user); // Set user in Auth object for getting in controllers
                }
            }
        }

        return $next($request);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM