Heim  >  Artikel  >  PHP-Framework  >  Laravel-Entwicklung: Wie implementiert man die API-Authentifizierung mit Laravel Passport?

Laravel-Entwicklung: Wie implementiert man die API-Authentifizierung mit Laravel Passport?

PHPz
PHPzOriginal
2023-06-13 17:34:381643Durchsuche

Laravel ist ein Open-Source-PHP-Webanwendungs-Framework, das Entwicklern dabei helfen soll, auf einfache Weise effiziente Webanwendungen zu erstellen. Laravel Passport ist Teil des Laravel-Frameworks. Es handelt sich um einen Authentifizierungsserver, der das OAuth2-Protokoll implementiert und leistungsstarke Unterstützung für die API-Entwicklung bietet. In diesem Artikel erfahren Sie, wie Sie die API-Authentifizierung mit Laravel Passport implementieren.

  1. Laravel Passport installieren

Bevor wir Laravel Passport verwenden, müssen wir es zuerst installieren. Laravel Passport kann durch Ausführen des folgenden Befehls installiert werden:

composer require laravel/passport

Nachdem die Installation abgeschlossen ist, müssen Sie auch den Befehl php artisan migrate ausführen, um die erforderlichen Datentabellen zu erstellen. php artisan migrate命令来创建所需的数据表。

  1. 配置认证中间件

要使用Laravel Passport进行API身份验证,我们需要将其与Laravel的认证中间件结合使用。可以在app/Http/Kernel.php文件中为API组添加相应的认证中间件:

protected $middlewareGroups = [
    'api' => [
        'throttle:60,1',
        IlluminateRoutingMiddlewareSubstituteBindings::class,
        LaravelPassportHttpMiddlewareCreateFreshApiToken::class,
    ],
];

其中,CreateFreshApiToken中间件将在每个请求中检查API令牌,并在需要时自动刷新该令牌。

  1. 创建API认证路由

接下来,我们需要为API创建相应的认证路由。可以在routes/api.php文件中添加以下路由:

Route::post('login', 'APIAuthController@login');
Route::post('register', 'APIAuthController@register');

Route::group(['middleware' => ['auth:api']], function() {
    Route::get('details', 'APIAuthController@details');
    // 添加更多需要登录才能访问的API路由
});

在上面的代码中,auth:api中间件将确保只有已经通过身份验证的用户才能访问这些路由。AuthController是我们稍后将创建的控制器,其中包含处理身份验证和API路由的逻辑。

  1. 创建API认证控制器

现在,我们需要创建处理API身份验证和路由的控制器。可以使用以下命令创建AuthController

php artisan make:controller API/AuthController

AuthController中应该包含以下方法:

use IlluminateHttpRequest;
use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesValidator;
use AppUser;

class AuthController extends Controller
{
    /**
     * 用户注册
     *
     * @param  IlluminateHttpRequest  $request
     * @return IlluminateHttpResponse
     */
    public function register(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|unique:users',
            'password' => 'required|string|min:6',
        ]);

        if ($validator->fails()){
            return response(['errors'=>$validator->errors()->all()], 400);
        }

        $request['password'] = bcrypt($request['password']);
        $user = User::create($request->toArray());
        $token = $user->createToken('MyApp')->accessToken;
        return response(['token' => $token], 200);
    }

    /**
     * 用户登录
     *
     * @param  IlluminateHttpRequest  $request
     * @return IlluminateHttpResponse
     */
    public function login(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'email' => 'required|string|email',
            'password' => 'required|string',
        ]);

        if ($validator->fails()) {
            return response(['errors'=>$validator->errors()->all()], 400);
        }

        if (!Auth::attempt(['email' => $request['email'], 'password' => $request['password']])) {
            return response(['message' => 'Invalid login credentials'], 400);
        }

        $user = $request->user();
        $token = $user->createToken('MyApp')->accessToken;
        return response(['token' => $token], 200);
    }

    /**
     * 获取用户详细信息
     *
     * @param  IlluminateHttpRequest  $request
     * @return IlluminateHttpResponse
     */
    public function details(Request $request)
    {
        return response()->json(['user' => $request->user()], 200);
    }
}

register()方法用于用户注册,login()方法用于用户登录,details()方法用于获取已登录用户的详细信息。需要注意的是,register()login()方法将为已经通过验证的用户创建新的API令牌,并将其返回给客户端。

  1. 测试API身份验证

现在,我们可以通过发送用户名和密码来测试API身份验证。可以使用Postman或curl等工具执行以下命令:

curl -X POST 
  http://your-app-url/api/login 
  -H 'content-type: application/json' 
  -d '{
    "email": "user@example.com",
    "password": "password"
}'

如果用户名和密码是正确的,将收到包含API令牌的响应:

{
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImU4YmI2Njk0MGEyNmIzY2Q2ZmY4M2Q3MjQ5ZjgzODE1MTI2ZmRkMDIyM2YyMzVmOGZmNjhlOWM5NGU2Mzk4ZTU3ZWZiMDJhNmQyZmRlZjA2In0.eyJhdWQiOiIxIiwianRpIjoiZThiYjY2OTAwZTI2YjNjZDZmZjgzZDcyNDlmODM4MTUxMjZmZGQwMjIzZjIzNWY4ZmY2OGU5Yzk0ZTYzOThlNTdlZmIwMmE2ZDJmZGVmMDYiLCJpYXQiOjE2Mjg5NDM3NzQsIm5iZiI6MTYyODk0Mzc3NCwiZXhwIjoxNjMxMDQ5Nzc0LCJzdWIiOiIxIiwic2NvcGVzIjpbXX0.toR762TgsNDarQZs6azl-jg-tP2996vzUc-LOQB90Twcb0Y3BC5vrd3jDW70QQw961MwV_sFrU1dhyKLMN76lG6B03zv6GjU6tLHyrqQi88t0clSrVupAcaQHOAB0gGLBRAOc5Ql1z9CHXx8f_FkA3RVC4htHNTk_r0mM-szWcf1sRONQYaARPDFl7ZJwj1_wYB7M6dcpiEDDhpyzmRFPv7pYyX8805BL4yg6z-Kmxc-DW4GSS4NTBxnctwGPf9w8fYc2zJGHXmT6OtqVjuqKDdFQgxIQhEkeSldBZmzTIPIR_tTa8Ub3Cxlx69zAfJTHosXwPYQOO03LBJwNVdjeLIkKgQK1PcAXD2kN4-RuyTEMXYNQ0wRGaHIb3vxwqVdjrrVE9yrDMIpAPRgzFwzXbJWvKmxzZpFTUz9RvIqUFt2zNbIG5kLOUyvmKIqO-aTISCT0wu0T0ZEq-DpXJ7-C6z-M0cJJP37y7eV4jdAMx7yD9jT85Knv4_hjLyKvF4We5DSSOYjeIVoq3XHNJdmYJ7X3ph6Ko1CfdtVKNVf20Vx8Z_Zi-pe9bTY0n-tSkwDvVXpVOrb3BOalq7MbOpTe8Klf9uZ_ZIDqTlTnrYV_oh_5isrImv7r8D1NX1G4p9jRcI16MEFDE"
}

然后,可以使用另一个命令来访问需要身份验证的路由:

curl -X GET 
  http://your-app-url/api/details 
  -H 'authorization: Bearer <token>'

在上面的命令中,将d6fb5a6237ab04b68d3c67881a9080fa

    Konfigurieren der Authentifizierungs-Middleware
    1. Um Laravel Passport für die API-Authentifizierung zu verwenden, müssen wir es in Verbindung mit der Authentifizierungs-Middleware von Laravel verwenden. Sie können die entsprechende Authentifizierungs-Middleware für die API-Gruppe in der Datei app/Http/Kernel.php hinzufügen:
    {
        "user": {
            "id": 1,
            "name": "User",
            "email": "user@example.com",
            "email_verified_at": null,
            "created_at": "2021-08-13T02:58:04.000000Z",
            "updated_at": "2021-08-13T02:58:04.000000Z"
        }
    }

    Darunter wird jeweils die Middleware CreateFreshApiToken überprüft Fordern Sie ein API-Token an und aktualisieren Sie das Token bei Bedarf automatisch.

      🎜API-Authentifizierungsroute erstellen🎜🎜🎜Als nächstes müssen wir die entsprechende Authentifizierungsroute für die API erstellen. Die folgenden Routen können in der Datei routes/api.php hinzugefügt werden: 🎜rrreee🎜 Im obigen Code stellt die Middleware auth:api sicher, dass nur authentifizierte Benutzer darauf zugreifen können diese Routen. AuthController ist der Controller, den wir später erstellen werden und der die Logik für die Authentifizierung und das API-Routing enthält. 🎜
        🎜 API-Authentifizierungs-Controller erstellen 🎜🎜🎜Jetzt müssen wir den Controller erstellen, der die API-Authentifizierung und das Routing übernimmt. AuthController kann mit dem folgenden Befehl erstellt werden: 🎜rrreee🎜AuthController sollte die folgenden Methoden enthalten: 🎜rrreee🎜register()-Methode wird verwendet für Benutzerregistrierung. Die Methode login() wird zum Anmelden verwendet, und die Methode details() wird verwendet, um die detaillierten Informationen des angemeldeten Benutzers abzurufen. Es ist zu beachten, dass die Methoden register() und login() ein neues API-Token für den authentifizierten Benutzer erstellen und es an den Client zurückgeben. 🎜
          🎜API-Authentifizierung testen 🎜🎜🎜Jetzt können wir die API-Authentifizierung testen, indem wir Benutzernamen und Passwort senden. Der folgende Befehl kann mit einem Tool wie Postman oder Curl ausgeführt werden: 🎜rrreee🎜 Wenn Benutzername und Passwort korrekt sind, wird eine Antwort mit dem API-Token empfangen: 🎜rrreee🎜 Ein weiterer Befehl kann dann verwendet werden, um auf Routen zuzugreifen, die eine Authentifizierung erfordern : 🎜rrreee🎜Ersetzen Sie im obigen Befehl d6fb5a6237ab04b68d3c67881a9080fa durch das im vorherigen Schritt erhaltene API-Token. Wenn das Token gültig ist, erhalten Sie eine authentifizierte Antwort: 🎜rrreee🎜🎜 Zusammenfassung 🎜🎜🎜 In diesem Artikel haben wir behandelt, wie Sie die API-Authentifizierung mit Laravel Passport implementieren. Mit Laravel Passport können Sie Ihrer Web-API ganz einfach starke Authentifizierungsunterstützung hinzufügen und so Ihre Benutzerdaten sicherer machen. Laravel Passport bietet außerdem weitere leistungsstarke Funktionen wie API-Zugriffstoken-Verwaltung und OAuth2-Client-Verwaltung. Wenn Sie ein Laravel-Entwickler sind, erfahren Sie unbedingt mehr über Laravel Passport und verwenden Sie es in Ihrem nächsten Webprojekt. 🎜

Das obige ist der detaillierte Inhalt vonLaravel-Entwicklung: Wie implementiert man die API-Authentifizierung mit Laravel Passport?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn