Laravel5.7+JWT+cors+Laravel-Medialibrary+clockwork安装配置

    xiaoxiao2022-06-30  120

    创建新项目

    laravel new yourproject cd yourproject vim .env # 修改配置文件

    安装Laravel-lang

    以下内容来自Laravel-lang的github主页

    For Laravel 5.8 : run composer require caouecs/laravel-lang:~4.0 in your project folder For Laravel 5.1-7 : run in your project folder For Laravel 5 : run composer require caouecs/laravel-lang:~2.0 in your project folder For Laravel 4 : run composer require caouecs/laravel-lang:~1.0 in your project folder Files of languages are in “vendor/caouecs/laravel-lang” directory Copy the folders of languages that you want, in the resources/lang folder of your Laravel application (app/lang in Laravel 4).

    我安装的是5.7,执行:

    composer require caouecs/laravel-lang:~3.0

    安装clockwork

    执行:

    composer require itsgoingd/clockwork

    对于5.5以前的版本还需要配置config/app.php文件:

    'providers' => [ ... Clockwork\Support\Laravel\ClockworkServiceProvider::class ]

    为什么使用clockwork而不是debugger,因为它的侵入性更低,而且debugger是运行在页面上的,如果刷新了或者打开多个页面的情况下,调试信息会分散,丢失。而clockwork配合chrome简直是神器,当然你也可以两个都安装。

    安装laravel-cors

    安装laravel-cors是为了解决跨域问题,即使你的应用最终部署在一个服务器上,调试开发的时候前后端一般也是分别开发,同样存在跨域问题。

    composer require barryvdh/laravel-cors

    在app/Http/Kernel.php中进行全局配置:

    protected $middleware = [ // ... \Barryvdh\Cors\HandleCors::class, ];

    进行局部配置:

    protected $middlewareGroups = [ 'web' => [ // ... ], 'api' => [ // ... \Barryvdh\Cors\HandleCors::class, ], ];

    安装JWT

    关于这部分的内容,主要来自于:JWT 完整使用详解

    通过composer安装1.0@rc以上版本版本:

    composer require tymon/jwt-auth 1.*@rc

    截止该博客编写时不加版本号默认安装的好像是0.5.12版本,和别的包有冲突,会发出错误提示。

    创建配置文件

    php artisan vendor:publish --provider=“Tymon\JWTAuth\Providers\LaravelServiceProvider”

    生成安全密钥

    php artisan jwt:secret

    更新模型

    主要是实现Tymon\JWTAuth\Contracts\JWTSubject这个接口:

    <?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Tymon\JWTAuth\Contracts\JWTSubject; /** * App\User * * @property-read \Illuminate\Notifications\DatabaseNotificationCollection|\Illuminate\Notifications\DatabaseNotification[] $notifications * @method static \Illuminate\Database\Eloquent\Builder|\App\User newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|\App\User newQuery() * @method static \Illuminate\Database\Eloquent\Builder|\App\User query() * @mixin \Eloquent */ class User extends Authenticatable implements JWTSubject { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'user', '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 []; } }

    修改 auth.php

    config/auth.php

    'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'jwt', // 原来是 token 改成jwt 'provider' => 'users', ], ],

    注册两个 Facade

    这两个 Facade 并不是必须的,但是使用它们会给你的代码编写带来一点便利。 config/appp.php

    'aliases' => [ ... // 添加以下两行 'JWTAuth' => 'Tymon\JWTAuth\Facades\JWTAuth', 'JWTFactory' => 'Tymon\JWTAuth\Facades\JWTFactory', ],

    使用

    你可以在路由中使用jwt.auth这个中间件进行登录验证:

    Route::post('register', 'AuthController@register'); Route::group([ 'middleware' => 'jwt.auth' ], function ($router) { Route::post('login', 'AuthController@login'); Route::post('logout', 'AuthController@logout'); });

    其他

    一般使用JWT就是为了通过ajax的方式访问站点,我们封装ApiController作为所有控制器的父类,方便管理,。

    <?php namespace App\Http\Controllers; use Symfony\Component\HttpFoundation\Response as FoundationResponse; class ApiController extends Controller { public function failed($message = null, $code = FoundationResponse::HTTP_BAD_REQUEST, $status = 'error'){ return response()->json(['message' => $message], $code); } public function created($new = []) { return response()->json([ 'created' => $new ],FoundationResponse::HTTP_CREATED); } /** * @param $data * @param string $status * @return mixed */ public function success($data = []){ return response()->json($data, FoundationResponse::HTTP_OK); } public function getUserId(){ return auth()->user()->id; } public function user(){ return auth()->user(); } }

    安装Laravel-Medialibrary

    在项目根目录下执行命令:

    composer require “spatie/laravel-medialibrary:^7.0.0”

    生成数据表迁移文件:

    php artisan vendor:publish --provider=“Spatie\MediaLibrary\MediaLibraryServiceProvider” --tag=“migrations”

    执行迁移:

    php artisan migrate

    生成配置文件:

    php artisan vendor:publish --provider=“Spatie\MediaLibrary\MediaLibraryServiceProvider” --tag=“config”


    最新回复(0)