Auth::viaRemember() 这个函数只有在第一次登录过期后,当系统通过remember进行认证时,才返回true。
第一次见这个函数时,试了下,始终返回false,后来经过搜索,结合自己的想法,觉得应该就是这样的。过了一晚,第二天早上再试,这个函数就返回true了。
Auth::viaRemember() 这个函数只有在第一次登录过期后,当系统通过remember进行认证时,才返回true。
第一次见这个函数时,试了下,始终返回false,后来经过搜索,结合自己的想法,觉得应该就是这样的。过了一晚,第二天早上再试,这个函数就返回true了。
Laravel 作为一个全栈开发框架,天然支持把前后端集成在一起开发,避免了前后端两个项目在不同开发工具中进行切换,节省很多时间,开发体验更好,真是自由全栈开发者的一大利器。
在本文中,我们将使用 vite 在 laravel 9 中安装 vue 3。
创建 Laravel 项目
composer create-project laravel/laravel laravel-vite-vue
安装 vue 3 和 vue-loader
npm install vue@next vue-loader@next
安装 plugin-vue
npm i @vitejs/plugin-vue
安装其它依赖
npm install
编辑 vite.config.js
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import vue from '@vitejs/plugin-vue'
export default defineConfig({
plugins: [
vue(),
laravel([
'resources/css/app.css',
'resources/js/app.js',
]),
],
});
修改 resources/js/app.js
import './bootstrap';
import { createApp } from 'vue';
import app from './Page/app.vue'
createApp(app).mount("#app")
在 resources/Page 文件夹下添加 app.vue,内容如下
<template>
<h1>
Laravel 9 vite with vue 3
</h1>
</template>
编辑 resources/views/welcome.blade.php
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel 9 with vue 3 vite</title>
</head>
<body>
<div id="app"></div>
@vite('resources/js/app.js')
</body>
</html>
执行 npm run dev 和 php artisan serve 。
最后打开 https://notes.wujie.me:8000 就可以看效果了。
对于高版本Laravel,应该大同小异,以此为参考进行。
开发中,有时需要重置密码,以下是123456加密后的文本,可以直接替换数据库中的密码字段,把密码改为123456。
$2y$10$sZKmNv.T8JUqNN7ZaLfzd.xvNGbAf5EWP5OQ2csOmhnRIWuDsip3W
Laravel在返回JSON时,会对中文进行转码,转码后的内容无法用肉眼直接识别,所以为了调试方便,可以禁止对中文进行转码:
setEncodingOptions(JSON_UNESCAPED_UNICODE);
1、缓存配置信息:php artisan config:cache
该操作把配置信息从.env缓存到php文件中,否则会因为高并发,多个请求同时读取.env文件,会造成读取失败,从而读取到了config文件夹下的默认配置信息,会造成数据库连接失败,或读取不到 APPP_KEY 等错误。
2、打开opcache,这个真的会有很大的性能提升!执行 vi /etc/php/8.3/fpm/php.ini,注意不同服务器上的版本和路径。
具体修改地方如下图:


Laravel中做登录,真的太简单了,框架已经集成了大多数的功能,我们只需要把相关数据传递过去即可。代码如下:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
public function index()
{
// 如果用户已登录,则直接跳转到之前页面
if (Auth::check()) {
return redirect(url()->previous());
}
return view('login');
}
public function login(Request $request)
{
$credentials = $request->validate([
'username' => ['required'],
'password' => ['required'],
]);
if (Auth::attempt($credentials, $request->remember)) {
$request->session()->regenerate();
return redirect()->intended();
}
return back()->withErrors([
'loginError' => '用户名或密码不正确。',
])->onlyInput('username');
}
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/')->with('success', '退出成功!');
}
}
相应的路由如下:
Route::get('/login', [LoginController::class, 'index'])->name('login.index');
Route::post('/login', [LoginController::class, 'login'])->name('login');
Route::get('/logout', [LoginController::class, 'logout'])->middleware('auth')->name('logout');
Laravel中表单验证可以用FormRequest来进行,但是这个默认是返回视图文件的,如果想要把验证结果以JSON格式返回,可以使用如下代码(failedValidation函数):
<?php
namespace App\Http\Requests;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\ValidationException;
use Symfony\Component\HttpFoundation\Response;
class TagStoreRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules(): array
{
return [
'tag' => 'required|unique:tags',
];
}
public function messages(): array
{
return [
'tag.required'=> '标签名称不能为空!',
'rag.unique' => '该标签已存在!',
];
}
protected function failedValidation(Validator $validator)
{
throw new ValidationException(
$validator,
response()->json(
[
'code'=>-1,
'msg'=> $validator->errors()->first()
],
Response::HTTP_UNPROCESSABLE_ENTITY
)
);
}
}
在执行update进行更新数据时,有时需要对唯一性进行验证,这时要在验证项的后面加上一个ID,不然Laravel会认为该字段内容已存在。
具体验证代码如下:
$validator = validator($request->all(), [
'name' => 'required|unique:departments,name,' . $department->id,
]);
if ($validator->fails()) {
return response()->json([
'code' => -1,
'msg' => $validator->errors()->first()
])->setEncodingOptions(JSON_UNESCAPED_UNICODE);
}
$department->update($validator->valid());
return response()->json(['code' => 0, 'msg' => 'success']);
新增时的验证:
$validator = validator($request->all(), [
'name' => 'required|unique:departments',
]);
if ($validator->fails()) {
return response()->json([
'code'=>-1,
'msg'=> $validator->errors()->first()
])->setEncodingOptions(JSON_UNESCAPED_UNICODE);
}
Department::create($validator->valid());
return response()->json(['code'=>0]);
获取已验证的数据:$validator->valid()
安装
composer require spatie/laravel-permission
发布迁移文件:
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"
在config/app.php 中,Providers 数组里添加:
'providers' => [
// ...
Spatie\Permission\PermissionServiceProvider::class,
];
发布配置文件:
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"
迁移数据库
php artisan migrate
在User Model 引用 HasRoles trait:
use Spatie\Permission\Models\Role;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable, HasRoles;
}
用法:
创建角色:$role=Role::create(['name'=>'超级管理员']);
创建权限:$permission=Permission::create(['name'=>'*']);
给角色赋予权限:$role->givePermissionTo($permission);
给用户一个角色:$user->assignRole('超级管理员');
在blade页面获取用户的第一个角色:{{ Auth()->user()->getRoleNames()->first() }}