Php Laravel 5.3使用自己的API

Php Laravel 5.3使用自己的API,php,laravel,laravel-5,laravel-passport,Php,Laravel,Laravel 5,Laravel Passport,我目前正在将一个代码库移植到更加RESTful的模式,这样我就可以从一个API运行一个移动应用程序和一个web应用程序 我知道laravel 5.3现在实现了laravel Passport,但我如何使用自己的API,即用户注册时获得身份验证令牌/API令牌,然后服务器的每个请求都会根据该令牌进行检查,到目前为止,我的API路由中有以下内容: Route::group(['middleware' => 'auth:api'], function () { Route::get('c

我目前正在将一个代码库移植到更加RESTful的模式,这样我就可以从一个API运行一个移动应用程序和一个web应用程序

我知道laravel 5.3现在实现了laravel Passport,但我如何使用自己的API,即用户注册时获得身份验证令牌/API令牌,然后服务器的每个请求都会根据该令牌进行检查,到目前为止,我的API路由中有以下内容:

Route::group(['middleware' => 'auth:api'], function () {
    Route::get('classes', 'ClassController@index');
    Route::get('classes/{id}', 'ClassController@show');
    Route::post('classes', 'ClassController@create');
    Route::put('classes', 'ClassController@edit');
    Route::delete('classes', 'ClassController@destroy');
});
在我的Http/kernal.php中,我添加了

\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class
到我的$middleWareGroups数组


那么,如何为我的用户生成身份验证密钥,即当他们登录时,如何向该用户添加令牌?

要使用您自己的api和其他前端框架,您需要为每个AJAX请求添加一个请求头:将头X-CSRF-token设置为该页面的CSRF令牌

例如:使用Javascript

$.ajax({
    url: $url,
    headers:{'X-CSRF-TOKEN': Laravel.csrfToken},
    type: $type,
    dataType: $dataType,
    async: $async,
    data: $data,
});

我回答这个问题是为了未来的用户,他们来到这里是因为他们的API在尝试使用自己的API时响应“未经验证”

OPs问题:“那么如何为我的用户生成身份验证密钥,即当他们登录时,如何向该用户添加令牌?”

回答:如果您通过CreateFreshAPIToken中间件使用自己的API,则不需要生成特殊的身份验证密钥/令牌。身份验证通过“laravel_令牌”cookie完成,该cookie在添加CreateFreshApitonk中间件时附加到您的响应中

当接收到此cookie发送的请求时,passport将解密此嵌入令牌

对于按照文档中的所有步骤使用自己的API后仍收到“未验证”消息的用户:

如果没有为路由组定义Laravel Middleware Illumb\Cookie\Middleware\EncryptCookie,则整个概念将不起作用。 此信息不由文档提供。不过这完全有道理。如果cookie从未加密,则无法解密,因此Passport提供的TokenGuard中始终存在解密异常

默认情况下,此中间件针对所有请求进行配置,在Kernel.php中类似如下:

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
    ];
}
如果不是,您应该添加它


希望我能帮助一些人在几个小时后泪流满面地来到这里

看这个它是免费的,它会解释一切,包括一个消费你自己的apiWatch的例子。从前端(不是vue.js)了解如何发送api请求。i、 我从哪里得到令牌或cookie?你在前端得到了什么?对它进行排序,在登录时将请求发送到oauth,我得到了我的令牌!你能分享一下你是如何解决这个问题的吗?升级到5.6.30+()会破坏你自己的API。仅升级到Passport 7.0和Laravel 5.7.x。帮助了我。