This article mainly introduces how to use laravel Passport for API authentication. It has certain reference value. Now I share it with you. Friends in need can refer to it.
Install larave
laravel new passport_demo cd passport_demo && composer install
Modify the database configuration in .env to your own database configuration
DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret
Installing Passport
composer require laravel/passport php artisan migrate php artisan passport:install
The following errors may occur during execution
Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))
Edit
namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Schema;//新增 class AppServiceProvider extends ServiceProvider{ public function boot(){} public function register(){ Schema::defaultStringLength(191);//新增 } }
Then execute these two commands again
php artisan migrate php artisan passport:install
Edit to add to
namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; use Laravel\Passport\HasApiTokens;//新增 class User extends Authenticatable{ use Notifiable; use HasApiTokens;//新增 protected $fillable = ['name', 'email', 'password',]; protected $hidden = ['password', 'remember_token',]; }
Call the function in the method
namespace App\Providers; use Illuminate\Support\Facades\Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use Laravel\Passport\Passport;//新增 class AuthServiceProvider extends ServiceProvider{ protected $policies = ['App\Model' => 'App\Policies\ModelPolicy',]; public function boot(){ $this->registerPolicies(); Passport::routes();//新增 } }
Add the options of the authorization guard in the configuration file Create the file instead
//修改前 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], ],
// 修改后 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
, the code here is from another tutorial.
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\User; use Illuminate\Support\Facades\Auth; use Validator; class UserController extends Controller { public $successStatus = 200; public function login() { if(Auth::attempt(['email' => request('email'), 'password' => request('password')])) { $user = Auth::user(); $success['token'] = $user->createToken('MyApp')->accessToken; return response()->json(['success' => $success], $this->successStatus); } else{ return response()->json(['error'=>'Unauthorised'], 401); } } 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); $success['token'] = $user->createToken('MyApp')->accessToken; $success['name'] = $user->name; return response()->json(['success'=>$success], $this->successStatus); } public function details() { $user = Auth::user(); return response()->json(['success' => $user], $this->successStatus); } }
Use postman to test
Registration interface, after successful registration, the token and user name will be returned
Login interface
Details interface
Related recommendations:
About the installation and configuration process of Laravel October
The above is the detailed content of How to use laravel Passport to implement API authentication. For more information, please follow other related articles on the PHP Chinese website!