Php 在Laravel/Lumen+;JWT+;用户自定义模型

Php 在Laravel/Lumen+;JWT+;用户自定义模型,php,laravel,authentication,jwt,lumen,Php,Laravel,Authentication,Jwt,Lumen,我花了一天时间试图理解如何在我的API中注入JWT auth,但不幸的是,我没有获得任何成功 我正在使用内腔框架。我认为jwtauth有一个很棒的库。我已经通过composer成功安装了它,它看起来工作正常,但我的项目中没有默认的用户模型,我可以轻松地迁移到默认模式,但我想了解所有这些东西是如何工作的 我不会在这里发布示例代码,为了让问题更简短,就在这里 我对Laravel和Lumen比较陌生,所以我的问题可能已经得到了回答,但我花了几个小时试图查找文档并理解框架中的Auth核心 我有自定义的用

我花了一天时间试图理解如何在我的API中注入JWT auth,但不幸的是,我没有获得任何成功

我正在使用内腔框架。我认为jwtauth有一个很棒的库。我已经通过composer成功安装了它,它看起来工作正常,但我的项目中没有默认的用户模型,我可以轻松地迁移到默认模式,但我想了解所有这些东西是如何工作的

我不会在这里发布示例代码,为了让问题更简短,就在这里

我对LaravelLumen比较陌生,所以我的问题可能已经得到了回答,但我花了几个小时试图查找文档并理解框架中的Auth核心

我有自定义的用户模型

<?php namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
    const CREATED_AT = 'createTime';
    const UPDATED_AT = 'updateTime';
    public $timestamps = true;
    protected $table = 'user';
    protected $guarded = ['password','login','id','activationEmail'];
    protected $hidden = [ 'password' ];
    protected function getDateFormat()
    {
        return 'U';
    }
}

好问题,默认情况下,laravel中的users表将是users

可以使用$table属性在模型中设置表名

  • 将模型视为数据库的表示形式。如果您有一个名为books的表,通常会有一个名为books的模型。同样在Laravel中,要生成模型,请从命令行运行php artisan make:model ModelName。这将为您完成大部分工作

  • 调用Auth::trunt()时,您将传递一个凭据数组,它将根据您的数据库匹配这些凭据。所以你可以
    Auth::trunt(['email'=>$email,'password'=>$password])
    Auth::trunt(['username'=>$username,'password'=>$password,'active'=>1],$memory)
    。是,已检查密码,您也可以使用Hash::check()手动检查密码

  • 创建自定义模型时,请使用php artisan generate命令为您创建模型。然后将名称空间更改为目录结构,以便composer可以自动加载该类(仅当您将模型移动到模型目录时)。从这里开始,您将不必做任何事情来与数据库交互,同样,模型只是表示一个表。除非创建一个名为AllBooks的模型来表示Books表,否则需要将
    $table
    属性定义为
    $table='Books'

  • 我真的建议在你跳入像Laravel这样的框架之前,先深入学习面向对象。虽然你想这样做很好,但它会误导你

    如果要继续使用laravel/lumen,还有一个快速提示。创建表时,请记住添加一个updated_at和created_at datetime字段,如果不这样做,请在模型中将timestamp属性设置为false,如下所示:
    public$timestamps=false

    祝你好运

    • 登录-验证
      • 从route->使用post方法调用控制器
      • 在auth controller中,验证请求,如,
        • $this->validate$请求[ 'email'=>'必填项| email | max:255','password'=>'必填项', ]);
        • 如果成功验证了这一点,
          • JWTAuth::尝试($credentials);//凭据应采用类似数组的数组格式('email'=>'dbfieldname','password')
        • 如果无效,则抛出如下错误:,
          • response()->json(['error'=>'invalid_credentials','message'=>'invalid credentials'],401)
        • 如果成功,生成令牌状,
          • response()->json(compact('token')

    在laravel中实现JWT非常累人和混乱,您总是会丢失包和参数

    试试这款laravel/lumen套装:

    下面是一个简单的示例项目,可以演示jwt auth的整个生命周期。这个很容易调试。

    在dingo api演示项目中,您可以在以下位置找到问题的大部分答案

  • /config/jwt.php
  • /config/api.php
  • /config/auth.php

  • 谢谢你的回答,但我知道什么是模型、控制器和面向对象的总体相对较好。我想知道如何为Auth facade创建自定义模型。这个类应该实现什么样的接口等等,以便author能够使用它,比如将模型作为数据库的表示。我想你的意思是把一个模型看作是一张桌子的代表。。