Generating Tokens
Sobald die Spalte api_token zu Ihrer Benutzertabelle hinzugefügt wurde, können Sie jedem User, der sich bei Ihrer Anwendung registriert, zufällige API-Token zuweisen. Sie sollten diese Token zuweisen, wenn bei der Registrierung ein User-Modell für den Benutzer erstellt wird. Bei Verwendung des authentication scaffolding, das durch den make:auth Artisan-Befehl bereitgestellt wird, kann dies in der create-Methode des RegisterControllers erfolgen:
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Hash;
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'api_token' => Str::random(60),
]);
}
Hashing Tokens
In den obigen Beispielen werden die API-Token als Klartext in Ihrer Datenbank gespeichert. Wenn Sie Ihre API-Token mit SHA-256-Hashing hashen möchten, können Sie die Hash-Option Ihrer api-guard-Konfiguration auf true setzen. Der api guard ist in Ihrer Konfigurationsdatei config/auth.php definiert:
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => true,
],
Generating Hashed Tokens
Bei der Verwendung von gehashten API-Token sollten Sie Ihre API-Token nicht während der Benutzerregistrierung generieren. Stattdessen müssen Sie Ihre eigene API-Token-Verwaltungsseite innerhalb Ihrer Anwendung implementieren. Diese Seite sollte es den Benutzern ermöglichen, ihr API-Token zu initialisieren und zu aktualisieren. Wenn ein Benutzer eine Anfrage zur Initialisierung oder Aktualisierung seines Tokens stellt, sollten Sie eine gehashte Kopie des Tokens in der Datenbank speichern und die Klartext-Kopie des Tokens zur einmaligen Anzeige an den View/Frontend-Client zurückgeben.
Beispielsweise könnte eine Controller-Methode, die das Token für einen bestimmten Benutzer initialisiert / auffrischt und das Klartext-Token als JSON-Antwort zurückgibt, wie folgt aussehen:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
class ApiTokenController extends Controller
{
/**
* Update the authenticated user's API token.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function
update(Request $request)
{
$token = Str::random(60);
$request->user()->forceFill([
'api_token' => hash('sha256', $token),
])->save();
return ['token' => $token];
}
}
Da die API-Token im obigen Beispiel genügend Entropie haben, ist es unpraktisch, "Regenbogentabellen" zu erstellen, um den ursprünglichen Wert des Hash-Tokens nachzuschlagen. Daher sind langsame Hashing-Methoden wie bcrypt unnötig.