(1)前后端分离–TP5.1后台实现登录

(1)前后端分离–TP5.1后台实现登录

这个是自己做笔记的也随便做一个小分析,万一可以帮助到一些小友呢。只有后台代码,前台自己看着敲吧,哈哈

1:前期准备

建立数据库api_tp5_com

并且新建登录数据表admin

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6ICB5ZWKeXd4,size_20,color_FFFFFF,t_70,g_se,x_16
再新内容数据表article

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6ICB5ZWKeXd4,size_20,color_FFFFFF,t_70,g_se,x_16

2:配置环境,连接后台连接数据库

配置环境成功运行tp5.1框架。

通过tp5.1框架中config/databas.php下配置连接数据库

3:登录功能

(1)由于是前后端分离涉及到跨域问题,在控制栏输入命令行php think make:controller api/Cross –plain 创建跨域Cross文件夹

class Cross extends Controller
{
    protected function initialize()
    {
        parent::initialize(); // TODO: Change the autogenerated stub
        header("Access-Control-Allow-Origin:*");
        header("Access-Control-Allow-Methods:GET, POST, PATCH, PUT, DELETE");
        header("Access-Control-Allow-Headers:Authorization, Content-Type, token, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-Requested-With");
        if (request()->isOptions()){
            exit();
        }
    }
}

(2)由于前后端分离涉及到的登录功能中的存储数据用到的JWT,不了解的可以根据下方网址搜索:thinkPHP框架里,PHP 用 JWT 详解_晨埃LUO定的博客-CSDN博客_thinkphp 使用jwt

 并且通过JWT获取加密token,登录token需要继承跨域文件Cross

使用JWT需要在cmd项目文件下输入该命令行:php composer.phar require firebase/php-jwt

通过命令行创建Base文件:php think make:controller api/Base

<?php
namespace app\api\controller;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
class Base extends Cross
{
    protected function initialize()
    {
        parent::initialize(); // TODO: Change the autogenerated stub
        //鉴权
        //获取token
        $header = request()->header();
        //判断token是否存在
        if (!isset($header['token']) || empty($header['token'])){
            json(['code'=>0,'msg'=>'token不存在'])->send();
            //如果token不存在直接终止运行
            die();//一定要加,否则即使token不存在也会继续往下执行
        }
        //是否能够解码token
        $jwt= new JWT();
        $key='api123456';
        $info=$jwt::decode($header['token'],new Key($key,"HS256"));
        $this->aid=$info->aid;
//        dump($info);die();
        return json(['code'=>1,'token'=>$info])->send();
//        dump($info);
//        die;
    }
}

下面来进行登录文件的那个啥,嗯~,Cross中对登录的token进行了encode加密,在登陆过程中先对于也应该进行解密decode。

创建数据表文件:php think make:model AdminModel  并连接数据表

<?php
namespace app\common\model;
use think\Model;
class AdminModel extends Model
{
    protected $table='admin';
}

通过命令行创建登录文件夹:php think make:controller api/Login

<?php
namespace app\api\controller;
use app\common\model\AdminModel;
use Firebase\JWT\JWT;
use think\Request;
class Login extends Cross
{
    public function login(Request $request)
    {
//        获取前台账号及其密码
        $username=$request->param('username');
        $password=$request->param('password');
        $admin=new AdminModel();//引用数据表文件
        $info=$admin->where('username',$username)->find();
        if (!$info){
            return json(['code'=> 0,'msg'=> '账号不存在!']);
        }
//        echo md5($password);  打印加密后的密码,并输入到postman中进行测试验证
        if ($info['password']!=md5($password)){
            return json(['code'=> 0,'msg'=> '账号或密码错误!']);
        }
//        需要导入JWT文件
        $jwt=new JWT();
        $key='api123456';
        $payload = [
            'iss' => "www.tp.io",
            'aud' => "www.tp.io",
            'iat' => time(),
            'nbf' => time(),
            'aid' => $info['id']
        ];
        //对token进行加密
        $token = $jwt::encode($payload, $key, 'HS256');
        return json(['code'=> 1,'msg'=> '登录成功!','token'=>$token]);
    }
}

接下来需要用到postman来测试此登录接口是否可用

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6ICB5ZWKeXd4,size_20,color_FFFFFF,t_70,g_se,x_16

获取到token数据之后,可以将postman API接口上传服务器提交给前段测验使用

!!!预告:(2)前后端分离–TP5.1后台实现增删改查

(3)前后端分离–TP5.1后台实现搜索数据

 
                       

点击阅读全文

上一篇 2023年 6月 14日 am10:46
下一篇 2023年 6月 14日 am10:49