Today we are going to do Laravel Api authentication please follow these steps for application authentication and authorization
The first step
Run the following command:
composer require laravel/passport
php artisan migrate
php artisan passport:installCopy the code
The second part
Modify Gurds in config/auth.php:
.'guards'= > ['web'= > ['driver'= >'session'.'provider'= >'users',].'api'= > ['driver'= >'passport'.'provider'= >'users',]],...Copy the code
The third step
app/User.php
<? php namespace App; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Passport\HasApiTokens; class User extends Authenticatable { use Notifiable, HasApiTokens; /** * The attributes that are mass assignable. * * @var array */ protected$fillable = [
'name'.'email'.'password',]; /** * The attributes that should be hiddenfor arrays.
*
* @var array
*/
protected $hidden = [
'password'.'remember_token',]; /** * The attributes that should be cast to native types. * * @var array */ protected$casts = [
'email_verified_at'= >'datetime',]; }Copy the code
The fourth step
app/Repositories/User/UserRepositoryInterface.php
<? php namespace App\Repositories\User; use Illuminate\Http\Request; interface UserRepositoryInterface { publicfunction register(Request $request);
public function login(Request $request);
public function refreshToken(Request $request);
public function details();
public function logout(Request $request);
public function response($data, int $statusCode);
public function getTokenAndRefreshToken(string $email, string $password);
public function sendRequest(string $route, array $formParams);
public function getOClient();
}
Copy the code
Step 5
Create the app/Repositories/User/UserRepository. PHP file
<? php namespace App\Repositories\User; use App\User; use GuzzleHttp\Client; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Laravel\Passport\Client as OClient; use GuzzleHttp\Exception\ClientException; use App\Repositories\User\UserRepositoryInterface; class UserRepository implements UserRepositoryInterface { const SUCCUSUS_STATUS_CODE = 200; const UNAUTHORISED_STATUS_CODE = 401; const BASE_URL ="http://mylemp-nginx";
public function __construct(Client $client) {
$this->http = $client;
}
public function register(Request $request) {
$email = $request->email;
$password = $request->password;
$input = $request->all();
$input['password'] = bcrypt($input['password']);
User::create($input);
$response = $this->getTokenAndRefreshToken($email.$password);
return $this->response($response["data"].$response["statusCode"]);
}
public function login(Request $request) {
$email = $request->email;
$password = $request->password;
if (Auth::attempt(['email'= >$email.'password'= >$password]) {$response = $this->getTokenAndRefreshToken($email.$password);
$data = $response["data"];
$statusCode = $response["statusCode"];
} else {
$data = ['error'= >'Unauthorised'];
$statusCode = self::UNAUTHORISED_STATUS_CODE;
}
return $this->response($data.$statusCode);
}
public function refreshToken(Request $request) {
if (is_null($request->header('Refreshtoken'))) {
return $this->response(['error'= >'Unauthorised'], self::UNAUTHORISED_STATUS_CODE);
}
$refresh_token = $request->header('Refreshtoken');
$Oclient = $this->getOClient();
$formParams = [ 'grant_type'= >'refresh_token'.'refresh_token'= >$refresh_token.'client_id'= >$Oclient->id,
'client_secret'= >$Oclient->secret,
'scope'= >The '*'];
return $this->sendRequest("/oauth/token".$formParams);
}
public function details() {
$user = Auth::user();
return $this->response($user, self::SUCCUSUS_STATUS_CODE);
}
public function logout(Request $request) {
$request->user()->token()->revoke();
return $this->response(['message'= >'Successfully logged out'], self::SUCCUSUS_STATUS_CODE);
}
public function response($data, int $statusCode) {
$response = ["data"= >$data."statusCode"= >$statusCode];
return $response;
}
public function getTokenAndRefreshToken(string $email, string $password) {
$Oclient = $this->getOClient();
$formParams = [ 'grant_type'= >'password'.'client_id'= >$Oclient->id,
'client_secret'= >$Oclient->secret,
'username'= >$email.'password'= >$password.'scope'= >The '*'];
return $this->sendRequest("/oauth/token".$formParams);
}
public function sendRequest(string $route, array $formParams) {
try {
$url = self::BASE_URL.$route;
$response = $this->http->request('POST'.$url['form_params'= >$formParams]);
$statusCode = self::SUCCUSUS_STATUS_CODE;
$data = json_decode((string) $response->getBody(), true);
} catch (ClientException $e) {
echo $e->getMessage();
$statusCode = $e->getCode();
$data = ['error'= >'OAuth client error'];
}
return ["data"= >$data."statusCode"= >$statusCode];
}
public function getOClient() {
return OClient::where('password_client', 1)->first(); }}Copy the code
Step 6
app/Http/Requests/UserLoginRequest.php
<? php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Contracts\Validation\Validator; use Illuminate\Http\Exceptions\HttpResponseException; class UserLoginRequest extends FormRequest { const UNPROCESSABLE_ENTITY = 422; publicfunction rules() {
return [
'email'= >'required|email'.'password'= >'required',]; } protectedfunction failedValidation(Validator $validator) {
throw new HttpResponseException(response()->json($validator->errors(), self::UNPROCESSABLE_ENTITY)); }}Copy the code
Step 7
app/Http/Requests/UserRegisterRequest.php
<? php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Contracts\Validation\Validator; use Illuminate\Http\Exceptions\HttpResponseException; class UserRegisterRequest extends FormRequest { const UNPROCESSABLE_ENTITY = 422; publicfunction rules() {
return [
'name'= >'required'.'email'= >'required|email|unique:users'.'password'= >'required'.'c_password'= >'required|same:password',]; } protectedfunction failedValidation(Validator $validator) {
throw new HttpResponseException(response()->json($validator->errors(), self::UNPROCESSABLE_ENTITY)); }}Copy the code
Step 8
app/Providers/AppServiceProvider.php
<? php namespace App\Providers; use App\Repositories\User\UserRepository; use App\Repositories\User\UserRepositoryInterface; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Register any application services. * * @return void
*/
public function register() {
$this->app->bind(UserRepositoryInterface::class, UserRepository::class);
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot() {//}}Copy the code
Step 9
app/Providers/AuthServiceProvider.php
<? php namespace App\Providers; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use Laravel\Passport\Passport; class AuthServiceProvider extends ServiceProvider { /** * The policy mappingsfor the application.
*
* @var array
*/
protected $policies = [
// 'App\Model'= >'App\Policies\ModelPolicy',]; /** * Register any authentication / authorization services. * * @return void
*/
public function boot() {
$this->registerPolicies(); Passport::routes(); }}Copy the code
Step 10
app/Http/Controllers/UserController.php
<? php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests\UserLoginRequest; use App\Http\Requests\UserRegisterRequest; use App\Repositories\User\UserRepositoryInterface; class UserController extends Controller { const SUCCUSUS_STATUS_CODE = 200; const UNAUTHORISED_STATUS_CODE = 401; publicfunction __construct(UserRepositoryInterface $userRepository) {
$this->userRepository = $userRepository;
}
public function login(UserLoginRequest $request) {
$response = $this->userRepository->login($request);
return response()->json($response["data"].$response["statusCode"]);
}
public function register(UserRegisterRequest $request) {
$response = $this->userRepository->register($request);
return response()->json($response["data"].$response["statusCode"]);
}
public function details() {
$response = $this->userRepository->details();
return response()->json($response["data"].$response["statusCode"]);
}
public function logout(Request $request) {
$response = $this->userRepository->logout($request);
return response()->json($response["data"].$response["statusCode"]);
}
public function refreshToken(Request $request) {
$response = $this->userRepository->refreshToken($request);
return response()->json($response["data"].$response["statusCode"]); }}Copy the code
Step 11
routes/api.php
<? php use Illuminate\Support\Facades\Route; Route::post('login'.'UserController@login');
Route::post('register'.'UserController@register');
Route::post('refreshtoken'.'UserController@refreshToken');
Route::group(['middleware'= > ['auth:api']], function () {
Route::post('logout'.'UserController@logout');
Route::post('details'.'UserController@details');
});
Copy the code
test
Open postman add request header
Accept : application/jsonCopy the code
And then do that
You can find the source code here
Today we are going to do Laravel Api authentication please follow these steps for application authentication and authorization
Dev. To /azibom/how-… Translation address: learnku.com/laravel/t/4… a
My official group click here. Link to join the group chat [PHP/ Web/advanced Learning exchange group], study together, discuss with each other.
The group has been managed to organize the knowledge system (source code, learning video and other information), welcome to add group for free.
Swoole is a fantastic PHP tutorial that is no slut on the market. PHP is as good a web developer as any other language, and Swoole makes it even better. Enter the communication, Internet of things industry to develop Baidu Map, Baidu order center, tiger tooth, zhanqi TV and so on! After the winter layoff period is the period of the expansion of the recruitment of large enterprises, now the market is flooded with primary programmers, advanced middle and senior programmers are absolutely the talent urgently needed by large enterprises, this learning course is suitable for those within 1-5 years of PHP developers are in a bottleneck period, want to break through their advanced middle and senior architects! Seats are limited, first come, first served!
Tencent T3-T4 standard boutique PHP architect tutorial directory directory, as long as you finish the guarantee salary rise a step (continue to update)
zhuanlan.zhihu.com
Screenshots of some materials:
And limited-time premium benefits:
Tencent Senior PHP engineer written test topic
★ Deal with orders of 100 million level PV with high concurrency
★ Laravel develops tmall component services
Combat FLAG TV live video architecture project combat
Scan the qr code below to get it
For those who are interested in PHP backend technology and PHP architecture technology, my official group click here to learn and discuss with each other.
The group has been managed to organize the knowledge system (source code, learning video and other information), welcome to add group for free.
This course is deeply standardized to Tencent T3-T4 standard, and builds a learning plan for web developers to advance middle and senior level and architects to improve technology, and for their own value-added and salary increase! If you join BAT special training camp, you can also get the quota and GO language learning permission!!