关于 dingo/API 使用中的一些思考

  最近打算制作api,便了解了一下dingo/api,总感觉dingo/api有些多余,许多功能都与laravel重叠,比如Rate Limiting,非常冗余。用户认证这里,调用了tymon/jwt-auth,但是并不支持guard,默认使用User表。总感觉实践起来,非常不方便。不知大家有什么看法和好的建议?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 11
liyu001989

5.1和 5.2使用哪个模型去config/auth里面配置就行了,没有一定是user表啊。觉得冗余和重叠的功能可以不用嘛,他封装了肯定是为了方便使用。

我的感觉反而是dingo/api给了我很多帮助,非常方便,至少对写REST api有很多指导作用。比如,配合着 league/fractal 资源include各种相关的资源,还自动帮我预加载。

7年前 评论

@liyu001989 我这里是有多个表需要调用,我是想能否像laravel中一样:Auth::guard('admin')->attempt($credentials);在调用的时候指定是哪个表,而不是只能指定一个。我找了找没有找到类似函数。有相应的方法吗?

7年前 评论
liyu001989
  'guards' => [
      'api' => [
          'driver' => 'jwt',
          'provider' => 'users',
      ],
     'admin' => [
          'driver' => 'jwt',
          'provider' => 'admins',
      ],
  ],
 'providers' => [
      'users' => [
          'driver' => 'eloquent',
          'model' => ApiDemo\Models\User::class,
      ],
      'admins' => [
          'driver' => 'eloquent',
          'model' => ApiDemo\Models\Admin::class,
      ],
  ],

所有的配置都跟laravel一样,调用方法也一样,你只需要配置config/auth 设置driver和provider,比如上面这样。

7年前 评论
liyu001989

model需要实现 Tymon\JWTAuth\Contracts\JWTSubject 这个接口

安利一下我写的demo https://github.com/liyu001989/lumen-api-de... 虽然是lumen,思路一样的

7年前 评论

@liyu001989 谢谢,(^o^)/。我研究一下

7年前 评论

@liyu001989 我看了一下,发现用的tymon/jwt-auth版本不一样,你的demo用的是"tymon/jwt-auth": "^1.0@dev",我用的是 "tymon/jwt-auth": "0.5.*",这个版本还没有上面你说的那些方法。还有就是dingo/api对版本有要求吗?以及你这个版本的开发文档去哪里找呀,github上的wiki里没有找到这个版本的文档。

7年前 评论
liyu001989

你貌似用的laravel 5.2 ,我感觉0.5.*应该也能用吧。dingo/api 5.0以上的都支持。用肯定是能用的,多试试吧

7年前 评论

@liyu001989 嗯嗯,用的是laravel5.2,tymon/jwt-auth": "^1.0@dev,现在有开发文档吗?

7年前 评论
liyu001989

貌似作者就一份文档,多看看issues吧,里面有挺多答案

7年前 评论
baitongda

还没有实现

7年前 评论

我们的项目使用的 5.2 和 dingo/API,并且 api 默认的用户表不是 users 。没有问题的。

dingo/API 和 jwt 的配置还是很灵活的,只要配置文件里面涉及到的类都可以自己重写的,直到你符合你的需求为止。

你需要在 jwt.php 配置一下:

        'auth' => function () {
            return new App\Extensions\JWTAuth\IlluminateAuthAdapter(Auth::guard('erp'));
        },

再新建一个文件:

<?php
namespace App\Extensions\JWTAuth;

use Exception;
use Illuminate\Contracts\Auth\Guard;
use Tymon\JWTAuth\Providers\Auth\AuthInterface;

class IlluminateAuthAdapter implements AuthInterface
{

    /**
     * @var \Illuminate\Auth\AuthManager
     */
    protected $auth;

    /**
     * @param Guard $auth
     */
    public function __construct(Guard $auth)
    {
        $this->auth = $auth;
    }

    /**
     * Check a user's credentials
     *
     * @param  array $credentials
     *
     * @return bool
     */
    public function byCredentials(array $credentials = [ ])
    {
        return $this->auth->once($credentials);
    }

    /**
     * Authenticate a user via the id
     *
     * @param  mixed $id
     *
     * @return bool
     */
    public function byId($id)
    {
        try {
            return $this->auth->onceUsingId($id);
        } catch (Exception $e) {
            return false;
        }
    }

    /**
     * Get the currently authenticated user
     *
     * @return mixed
     */
    public function user()
    {
        return $this->auth->user();
    }
}
7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!