Php 如何生成api_令牌?

Php 如何生成api_令牌?,php,laravel,laravel-5.3,Php,Laravel,Laravel 5.3,我已经使用guard创建了代码并对用户进行了身份验证,但它没有为我提供api\u令牌 /** * This'll provide login authentication to the user * @param Request $request * @return json */ public function authenticate(Request $request) { //getting and setting locale for the request

我已经使用guard创建了代码并对用户进行了身份验证,但它没有为我提供
api\u令牌

/**
 * This'll provide login authentication to the user
 * @param  Request $request
 * @return json
 */
public function authenticate(Request $request)
{   
    //getting and setting locale for the request
    $locale = ($request->header('lang-code') == 'KO') ? "ko" : "en";
    app()->setLocale($locale);

    $credentials = $request->only('email','password');

    try {
        // verify the credentials and create a token for the user
        if (!$token = auth()->attempt($credentials)) {
            return response()->json(['success' => parent::FAILURE, 'message' => trans('messages.api.login.failure')],401);
        }

    } catch (GeneralException $e) {
        // something went wrong
        return response()->json(['success' => parent::FAILURE, 'message' => trans('messages.api.login.tokenNC')],500);
    }

    return response()->json(['success' => parent::SUCCESS, 'message' => trans('messages.api.login.success'), 'data' => auth()->user()],200);
}
上面的函数工作正常,但当我使用
auth()->guard('api')->user()->api\u令牌时,我没有得到令牌。尽管我无法生成
api\u令牌
这里可能存在什么问题,但此列已经在我的数据库中

已编辑

routes/api.php:

Route::group(['namespace' => "Api\\v1", 'as' => 'api.v1.', 'prefix' => 'v1'], function () {
    Route::any('/login', 'AccessController@authenticate');
});
    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
    ],
config/auth.php:

Route::group(['namespace' => "Api\\v1", 'as' => 'api.v1.', 'prefix' => 'v1'], function () {
    Route::any('/login', 'AccessController@authenticate');
});
    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
    ],

您可以使用模型变体来自动完成这项工作,或者覆盖您的模型类的引导方法(在您的案例中是用户模型)

protected static function boot()
{
    parent::boot();
    static::creating(function($model)
    {
        $model->api_token = $model->generateCode();
    });
}

protected function generateCode()
{
    return bin2hex(openssl_random_pseudo_bytes(16));
    //you can use your own random fucntion here or you can use inbuilt Crypt funciton
}

您可能需要确保将使用令牌身份验证的任何路由都受到
auth:api
中间件的保护

像这个例子:

Route::group(['prefix' => 'api/v1', 'middleware' => 'auth:api'], function () {
    Route::post('/authentificate', 'AuthController@authentificate');
});

如果你仍然有采石场,请询问我或投票,如果我的回答对你有帮助,请接受我的回答!你的config/auth.php是什么样子的?你的路由文件还将我的问题@AbdouTahiriLet@AbdouTahiriLet提交给我试试。因此,这意味着我们需要在成功身份验证后创建
api_令牌
。否,我回答的是生成api令牌以供使用,但您需要覆盖您的身份验证方法,使用auth:api中间件进行身份验证,该中间件内置于api guardWhere中,可以在我的项目结构@msonovalin your User.php中找到此文件。默认情况下,它位于app中,而使用
auth:api
我没有获得数据您的意思是
$credentials
?实际上,我已经创建了一个名为
auth:api
的新中间件