Heim  >  Artikel  >  PHP-Framework  >  Detaillierte Schritte für Laravel zur Implementierung der API-Benutzerautorisierung mithilfe von JWT

Detaillierte Schritte für Laravel zur Implementierung der API-Benutzerautorisierung mithilfe von JWT

不言
不言nach vorne
2019-01-01 09:34:3910496Durchsuche

Der Inhalt dieses Artikels befasst sich mit den detaillierten Schritten für die Implementierung der API-Benutzerautorisierung durch Laravel. Ich hoffe, dass er für Sie hilfreich ist.

Teil 1 Installation von JWT

Schritt 1. Verwenden Sie Composer, um tymon/jwt-auth zu installieren:

`composer benötigt tymon/jwt -auth 1.0.0-rc.3

Schritt 2. Fügen Sie den Dienstanbieter hinzu (Laravel 5.4 und niedriger, 5.5 und höher müssen nicht hinzugefügt werden),

fügen Sie die folgende Zeile zu den Anbietern hinzu Array der Datei config/app.php:

<?php // 文件:app.php
&#39;providers&#39; => [
    // other code
    Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
]

Schritt 3. Veröffentlichen Sie die Konfigurationsdatei.
Führen Sie den folgenden Befehl aus, um die jwt-auth-Konfigurationsdatei zu veröffentlichen:

php artisan seller:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"

Schritt 4. Generieren Sie einen Schlüssel,

Dieser Befehl fügt Ihrer .env-Datei eine neue Zeile JWT_SECRET=secret hinzu.
php artisan jwt:secret

Der zweite Teil beginnt mit der Konfiguration

Schritt 5. Konfigurieren Sie Auth Guard, `
in config/auth In Für die .php-Datei müssen Sie Guards/Treiber auf jwt aktualisieren.
Dies kann nur verwendet werden, wenn Laravel 5.2 und höher verwendet wird.

<?php     &#39;defaults&#39; => [
    'guard' => 'api',
    'passwords' => 'users',
],
// other code
'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],

第六步. Benutzermodell ändern,
die TymonJWTAuthContractsJWTSubject-Schnittstelle im Benutzermodell implementieren,
getJWTIdentifier implementieren () und getJWTCustomClaims() zwei Methoden.

<?php namespace App;

use Tymon\JWTAuth\Contracts\JWTSubject;

class User extends Authenticatable implements JWTSubject
{
    // other code

    // Rest omitted for brevity
    
    /**
     * Get the identifier that will be stored in the subject claim of the JWT.
     *
     * @return mixed
     */
    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    /**
     * Return a key value array, containing any custom claims to be added to the JWT.
     *
     * @return array
     */
    public function getJWTCustomClaims()
    {
        return [];
    }
}

Teil 3 Erstellen Sie schnell einen DEMO-Test

Schritt 7. Fügen Sie einige grundlegende Authentifizierungsrouten hinzu:

<?php Route::group([
    &#39;middleware&#39; => 'api',
    'prefix' => 'auth'
], function ($router) {
    Route::post('login', 'AuthController@login');
    Route::post('register', 'AuthController@register');
    Route::post('logout', 'AuthController@logout');
    Route::post('refresh', 'AuthController@refresh');
    Route::post('me', 'AuthController@me');
});
第八步. Create AuthController => php artisan make:controller AuthController:
<?php namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class AuthController extends Controller
{
    /**
     * Create a new AuthController instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth:api', ['except' => ['login', 'register']]);
    }

    /**
     * 用户使用邮箱密码获取JWT Token.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function login()
    {
        $credentials = request(['email', 'password']);

        if (! $token = auth()->attempt($credentials)) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }

        return $this->respondWithToken($token);
    }

    /**
     * 注册新用户
     */
    public function register(Request $request)
    {
        // 数据校验
        // 数据验证
        $validator = Validator::make($request->all(), [
            'name'       => 'required',
            'email'      => 'required|email',
            'password'   => 'required',
            'c_password' => 'required|same:password'
        ]);

        if ($validator->fails()) {
            return response()->json(['error'=>$validator->errors()], 401);
        }

        // 读取参数并保存数据
        $input = $request->all();
        $input['password'] = bcrypt($input['password']);
        $user = User::create($input);

        // 创建Token并返回
        return $user;
    }

    /**
     * 获取经过身份验证的用户.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function me()
    {
        return response()->json(auth()->user());
    }

    /**
     * 刷新Token.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function refresh()
    {
        return $this->respondWithToken(auth()->refresh());
    }


    /**
     * Get the token array structure.
     *
     * @param  string $token
     *
     * @return \Illuminate\Http\JsonResponse
     */
    protected function respondWithToken($token)
    {
        return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => auth()->factory()->getTTL() * 60
        ]);
    }
}

Schritt 9. Verwenden Sie Postman, um die API zu testen:

Detaillierte Schritte für Laravel zur Implementierung der API-Benutzerautorisierung mithilfe von JWT

Detaillierte Schritte für Laravel zur Implementierung der API-Benutzerautorisierung mithilfe von JWT


Um die API-Datenerfassung zu testen, müssen Sie Token in den Headern hinzufügen;

key=Authorization , value=Bearer Space Token

Detaillierte Schritte für Laravel zur Implementierung der API-Benutzerautorisierung mithilfe von JWT

Token-Aktualisierung:

Detaillierte Schritte für Laravel zur Implementierung der API-Benutzerautorisierung mithilfe von JWT


Das obige ist der detaillierte Inhalt vonDetaillierte Schritte für Laravel zur Implementierung der API-Benutzerautorisierung mithilfe von JWT. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen