Home >Backend Development >PHP Tutorial >laravel dingo/api adds jwt-auth authentication

laravel dingo/api adds jwt-auth authentication

不言
不言Original
2018-07-09 09:48:543212browse

This article mainly introduces about adding jwt-auth authentication to laravel dingo/api. It has certain reference value. Now I share it with you. Friends in need can refer to it.

We learned about laravel dingo earlier /apiCreate a simple API so that the API is open to everyone. How to view and limit calls to the API? You can use jwt-auth to verify, JSON Web Token Authentication

 1. First install the jwt-auth plug-in, and use composer to install it on the command line

composer require tymon/jwt-auth '0.5.*'

 2. Then publish

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"

A jwt.php file is generated in /config/

 3. Generate key

php artisan jwt:generate

If the command fails to run, you can modify the key set by changeme in the /config/jwt.php file

'secret' => env('JWT_SECRET', 'changeme'),

4. Modify /app/Api/Controllers/HelloController.php to

<?php

namespace App\Api\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
//添加jwt-auth认证
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;

class HelloController extends Controller
{
    public function index()
    {
        return &#39;{content:Helloworld!}&#39;;
    }
//添加jwt-auth认证
  	public function authenticate(Request $request)
    {
        // grab credentials from the request
        $credentials = $request->only(&#39;email&#39;, &#39;password&#39;);

        try {
            // attempt to verify the credentials and create a token for the user
            if (! $token = JWTAuth::attempt($credentials)) {
                return response()->json([&#39;error&#39; => &#39;invalid_credentials&#39;], 401);
            }
        } catch (JWTException $e) {
            // something went wrong whilst attempting to encode the token
            return response()->json([&#39;error&#39; => &#39;could_not_create_token&#39;], 500);
        }

        // all good so return the token
        return response()->json(compact(&#39;token&#39;));
    }
}

5. Add routing (/routes/web .php)

$api->post(&#39;auth&#39;, &#39;App\Api\Controllers\HelloController@authenticate&#39;);

6. Test routing: php artisan api:routes, if the following prompt appears, it means it is correct

Access URL: ***.com/api/auth displays an error because no token is added

Re-modify hellocontrol and routes

<?php

namespace App\Api\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;

class HelloController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */


    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return &#39;{content:Helloworld!}&#39;;
    }
  	public function authenticate(Request $request)
    {
        // grab credentials from the request
        $credentials = $request->only(&#39;email&#39;, &#39;password&#39;);

        try {
            // attempt to verify the credentials and create a token for the user
            if (! $token = JWTAuth::attempt($credentials)) {
                return response()->json([&#39;error&#39; => &#39;invalid_credentials&#39;], 401);
            }
        } catch (JWTException $e) {
            // something went wrong whilst attempting to encode the token
            return response()->json([&#39;error&#39; => &#39;could_not_create_token&#39;], 500);
        }

        // all good so return the token
        return response()->json(compact(&#39;token&#39;));
    }
  //添加user
  	public function user()
    {
      JWTAuth::parseToken();
      $user = JWTAuth::parseToken()->authenticate();
      return $user;
    }
}

name('home');

$api = app('Dingo\Api\Routing\Router');
$api->version('v1', function ($api) {
    $api->get('helloworld', 'App\Api\Controllers\HelloController@index');
  $api->post(&#39;auth&#39;, &#39;App\Api\Controllers\HelloController@authenticate&#39;);
  $api->get('auth', 'App\Api\Controllers\HelloController@user');
});

Use the Google Chrome postman plug-in to obtain the token. Note that it is the post method. The steps are as shown in the figure below

## Copy the obtained token. Paste it into the user verification token in the second step. Figure 5 below is the user we just registered

. The above is the entire content of this article. I hope it will be helpful to everyone’s learning. For help, please pay attention to the PHP Chinese website for more related content!

Related recommendations:

Explanation of the method of using Passport to implement Auth authentication in Laravel5.5

The implementation of composer automatic loading in the Laravel framework Detailed explanation

The above is the detailed content of laravel dingo/api adds jwt-auth authentication. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn