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!!