salmanzafar/laravel-jwt-auto-installer

此包已被弃用,不再维护。未建议替代包。

一个Laravel库,允许您通过单条命令添加tymon jwt auth库及其所有功能

v1.0.1 2020-01-06 17:42 UTC

This package is auto-updated.

Last update: 2021-01-01 10:42:32 UTC


README

Latest Version forks stars license Total Downloads

一个Laravel库,允许您通过单条命令添加tymon jwt auth库及其所有功能

为什么需要这个?

使用tymon/jwt-auth的人都知道,每次安装包时,他们都需要手动创建AuthController,然后复制粘贴所有代码,同样的情况也适用于模型和路由。所以每次您不得不这样做时,都会花费一些时间,作为开发者,我们希望有更简单的方法来做这件事。因此,我想出了这个主意,希望它可以帮助您,并使您的工作变得简单。

这个包会做什么?

该包将为您创建以下内容

  • 为您安装tymon/jwt-auth
  • 将在App\Http\Controllers内部发布AuthController (带代码)
  • User.php(模型,包括jwt函数的所有代码)
  • 将在api.php中发布路由(将创建所有认证路由,例如(登录、注册、认证用户详情、刷新令牌、注销)
  • 还将发布您的JWT_SECRET到.env文件

安装

使用包管理器composer安装laravel-jwt-auto-installer。

composer require salmanzafar/laravel-jwt-auto-installer

启用包(可选)

此包实现了Laravel自动发现功能。安装后,自动添加了包提供者和外观,适用于laravel >= 5.5。

配置

发布服务提供者文件

此步骤是必需的

php artisan vendor:publish --provider="Salman\AutoJWT\AutoJWTServiceProvider"

使用方法

php artisan jwt:init

Controller Model and Routes and Jwt Secret published.Thanks

就是这样,现在它会发布您想要的一切,例如控制器模型(带有jwt函数)和JWT的API路由

AuthController.php

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Symfony\Component\HttpFoundation\Response;

class AuthController extends Controller
{
    /**
     * Create a new AuthController instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth:api', ['except' => ['login','register']]);
    }

    /**
     * @param Request $request
     * @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
     * @throws \Illuminate\Validation\ValidationException
     */
    public function register(Request $request)
    {
        $this->validate($request, [
          "name" => "required|string|min:4",
          "email" => "required|email",
          "password" => "required|min:8|max:20|confirmed"
        ]);

        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => Hash::make($request->password),
        ]);

        return response([
            'data' => 'Thank you.Your account has been created'
        ],Response::HTTP_CREATED);
    }

    /**
     * Get a JWT via given credentials.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function login()
    {
        $credentials = request(['email', 'password']);

        if (! $token = auth()->attempt($credentials)) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }

        return $this->respondWithToken($token);
    }

    /**
     * Get the authenticated User.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function me()
    {
        return response()->json(auth()->user());
    }

    /**
     * Log the user out (Invalidate the token).
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function logout()
    {
        auth()->logout();

        return response()->json(['message' => 'Successfully logged out']);
    }

    /**
     * Refresh a token.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function refresh()
    {
        return $this->respondWithToken(auth()->refresh());
    }

    /**
     * Get the token array structure.
     *
     * @param  string $token
     *
     * @return \Illuminate\Http\JsonResponse
     */
    protected function respondWithToken($token)
    {
        return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => auth()->factory()->getTTL() * 60
        ]);
    }
}

User.php

<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements JWTSubject
{
    use Notifiable;

      /**
         * The attributes that are mass assignable.
         *
         * @var array
         */
        protected $fillable = [
            'name', 'email', 'password',
        ];

        /**
         * The attributes that should be hidden for 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',
        ];


    /**
     * Get the identifier that will be stored in the subject claim of the JWT.
     *
     * @return mixed
     */
    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    /**
     * Return a key value array, containing any custom claims to be added to the JWT.
     *
     * @return array
     */
    public function getJWTCustomClaims()
    {
        return [];
    }
}

api.php

Route::group(['prefix' => 'user'], function () {
            Route::post('register', 'AuthController@register');
            Route::post('login',  'AuthController@login');
            Route::group(['middleware' => ['auth:api']], function () {
                Route::post('refresh', 'AuthController@refresh');
                Route::post('me', 'AuthController@me');
                Route::post('logout', 'AuthController@logout');
            });
});

贡献

欢迎提交拉取请求。对于重大更改,请先打开一个问题来讨论您想更改的内容。

请确保根据需要更新测试。

已在php 7.3 & 7.4和laravel 6上测试^

许可

MIT许可证