首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Auth尝试方法在Laravel/Lumen + JWT +用户自定义模型中是如何工作的

Auth尝试方法在Laravel/Lumen + JWT +用户自定义模型中是如何工作的
EN

Stack Overflow用户
提问于 2015-10-04 15:17:29
回答 3查看 5.6K关注 0票数 2

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

我正在使用Lumen框架。我认为,JWT 用于Lumen和Laravel的JWT有一个很好的库。我已经通过composer成功地安装了它,它看起来工作正常,但是我在我的项目中没有默认的用户模型,我可以很容易地迁移到默认值,但是我想了解所有这些东西是如何工作的。

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

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

我有自定义用户模型

代码语言:javascript
运行
复制
<?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';
    }
}

当然,自定义控制器可以将请求路由到它。

但问题是,正如我最近发现的,JWT库使用Auth来实现jwt身份验证。

Auth用默认的用户模型做了一些神奇的事情,这反过来又影响了UserInterface,我的模型也应该实现这个接口吗?

我已经尝试在配置中显式地指定我的模型,但是它尝试使用旧模型,并抛出App\User未找到的异常。

请帮助找到这些问题的答案:

  1. 默认情况下,框架如何知道我的用户表的名称以及它有哪些字段?或者假设它有用户的名称,表中的列是常见的,比如电子邮件、登录、密码等等。
  2. 当尝试方法被调用时会发生什么?框架试图通过电子邮件找到用户,例如,如果找到了密码,会检查密码吗?
  3. 如何指定我的自定义模型,我试图更改配置,并获得了这个问题缺少参数1用于照明\Auth\AuthManager::createDriver()腔和JWT中描述的异常

如果有人能帮助解决和理解这个问题,我将不胜感激。

谢谢大家的帮助。

EN

回答 3

Stack Overflow用户

发布于 2015-10-05 01:23:47

很好的问题,默认情况下,laravel中的用户表将是用户。

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

  1. 将模型视为数据库的表示形式。如果您有一个名为books的表,您通常会有一个名为Books的模型。同样在Laravel中,要生成一个模型,可以从命令行运行php make:model ModelName。这将为你完成大部分工作。
  2. 当调用Auth::and ()时,您将传递一个凭据数组,它将与数据库匹配。所以你可以做Auth::attempt(['email' => $email, 'password' => $password])Auth::attempt(['username' => $username, 'password' => $password, 'active' => 1], $remember)。是的,检查了密码,还可以使用Hash:: check ()手动检查密码。
  3. 创建自定义模型时,请使用php artisan generate命令为您创建模型。然后将名称空间更改为您的目录结构为composer可以为您自动添加该类(只有当您移动模型以表示一个模型目录时)。从这里开始,您将不必做任何事情来与数据库交互,同样,一个模型只是表示一个表。除非创建一个名为AllBooks的模型来表示图书表,否则需要将$table属性定义为$table = 'Books';

在您跳入像Laravel这样的框架之前,我真的推荐深入学习面向对象的知识。虽然你想这样做是很好的,但它会误导你。

还有一个快速的提示,如果你要继续与拉里/内腔。在创建表时,请记住添加一个updated_at和created_at日期时间字段,如果不这样做,那么在模型中将时间戳属性设置为false,如:public $timestamps = false;

祝你好运!

票数 3
EN

Stack Overflow用户

发布于 2015-11-19 19:31:51

  • 登录- auth
    • 使用post方法调用您的控制器
    • 在auth控制器中,验证请求,例如,
      • $this->validate($request,电子邮件‘=>’所需的电子邮件\max:255,密码‘=> 'required’);
      • 如果成功验证了这一点,则
        • JWTAuth::$credentials;//凭据应该是数组格式,如数组(电子邮件‘=> 'dbfieldname',密码’)

代码语言:javascript
运行
复制
    - if not valid, throw error like,  
        - response()->json(['error' => 'invalid\_credentials', 'message' => 'Invalid Credentials'], 401)

代码语言:javascript
运行
复制
    - If success, generate token like,  
        - response()->json(compact('token'));

票数 0
EN

Stack Overflow用户

发布于 2015-11-20 04:04:12

在laravel中实现JWT是非常累人和令人困惑的,您将始终缺少包和参数。

试试这个拉里/流明包装:丁戈-api

这里是一个简单的例子,它可以演示jwt auth的整个生命周期。这个很容易调试。丁戈-api-演示

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

  1. /config/jwt.php
  2. /config/api.php
  3. /config/auth.php
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32935035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档