本文由 简悦 SimpRead 转码, 原文地址 juejin.cn
「这是我参与 11 月更文挑战的第 10 天,活动详情查看:2021 最后一次更文挑战」
背景
- 项目用 Thinkphp5.1 开发完成,对于各种关系模型的查询 Tp 处理起来还是比较吃力的。
- 作为努力奔跑的程序员,下一个项目我们决定用 Lavarel 进行开发。
- 因为掘金粑粑有奖励,所以把部分 gitee 上的私有的部分学习笔记整理一下。
说明
Laravel 属于中大型框架,各种功能都被内置了,而且 Laravel 官方的文档看的我是云里雾里的,对于新手感觉不是很友好。所以此系列文章只适合有 PHP 基础。想快速入门搞开发的。
正文
前面已经完整走过两个接口,所以登录接口会快速的进行实现。这可能也是后期项目开发过程中的一个无限重复过程吧。
- 定义路由 在文件 routes\web.php
Route::post('/login',[LogRegController::class,'login']); // 前端登录操作 注意命名空间
- 创建验证文件 app\Http\Validate\Login.php
<?php
namespace app\Http\Validate;
use App\Http\Validate\BaseValidate;
class Login extends BaseValidate{
/**
* 定义验证规则
*/
protected $rules = [
'name'=>'required|string|min:6|max:10',
'password'=>'required|string|min:6:max:12'
];
/**
* 定义提示信息
*/
protected $message = [
'name.required'=>'账号必须填写',
'password.required'=>'密码必须填写',
'name.min'=>'账号最少6位',
'password.min'=>'密码最少6位',
'name.max'=>'账号最多10位',
'password.max'=>'密码最多12位'
];
}
复制代码
这里因为是登录,就设置俩字段。一个是用户名,一个是密码。验证规则定义好就相当于需要的参数已经定义好了。
- Service 层业务编写
<?php
namespace app\Http\Service;
use App\Models\User;
use Illuminate\Support\Facades\Validator;
class LogRegService{
//用户名查询
public function getUserByName($name){
$res = User::query()->where('name',$name)->first();
return $res;
}
}
复制代码
- 然后控制器层获取验证通过的数据 请求 Service 层数据。做登录的逻辑。
<?php
namespace App\Http\Controllers;
use App\Exceptions\ApiException;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Service\LogRegService;
use App\Http\Validate\Login as LoginValidate;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
class LogRegController extends Controller
{
private $LGServer;
//实例化
public function __construct()
{
$this->LGServer = new LogRegService();
}
//登录操作
public function login(Request $request){
$data = ((new LoginValidate()))->getDateByRules($request->all());
//获取数据
$user = $this->LGServer->getUserByName($data['name']);
if(is_null($user)){
return $this->fail("用户不存在");
}
//验证密码
$is_pass = Hash::check($data['password'], $user->getAuthPassword());
if(!$is_pass){
return $this->fail("用户不存在或密码错误");
}
$token = Auth::guard('api')->login($user);
return $this->success($token);
}
}
复制代码
如果用户的用户名跟密码通过了验证,那么传统 web 是记录 session 中。因为我们这里是写的接口,所以这里的逻辑是,如果用户通过验证,这里是给返回一个合法的 令牌【token】,后续的所有的需要登录的地方都需要携带 token