Php Laravel 5.3使用自己的API
我目前正在将一个代码库移植到更加RESTful的模式,这样我就可以从一个API运行一个移动应用程序和一个web应用程序 我知道laravel 5.3现在实现了laravel Passport,但我如何使用自己的API,即用户注册时获得身份验证令牌/API令牌,然后服务器的每个请求都会根据该令牌进行检查,到目前为止,我的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
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。帮助了我。