当前位置: 首页 > 工具软件 > MediaLibrary > 使用案例 >

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

白智
2023-12-01

创建新项目

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”

 类似资料: