当前位置: 首页 > 知识库问答 >
问题:

参数1通过...::fromUser()laravel 5.6

金令秋
2023-03-14

我使用邮递员添加用户或登录,用户添加成功,但我得到这个错误

传递给Tymon\JWTAuth\JWT::fromUser()的参数1必须是Tymon\JWTAuth\Contracts\JWTSubject的实例,App\User给定的实例,在第54行的C:\Users\Web WorkStation\Desktop\laravelap\jwtlaravel\vendor\Tymon\JWTAuth\src\JWTAuth.php中调用

我在这条直线上找到了这个功能

 public function attempt(array $credentials)
    {
        if (! $this->auth->byCredentials($credentials)) {
            return false;
        }

        return $this->fromUser($this->user());
    }

这是我的用户模型:

    <?php

    namespace App;


    use Tymon\JWTAuth\Contracts\JWTSubject;
    use Illuminate\Notifications\Notifiable;
    use Illuminate\Foundation\Auth\User as Authenticatable;
    class User extends Authenticatable
    {
        use Notifiable;

        /**
         * The attributes that are mass assignable.
         *
         * @var array
         */
        protected $fillable = [
            'name', 'email', 'password','username','lastname','tel','tel',
        ];

        /**
         * The attributes that should be hidden for arrays.
         *
         * @var array
         */
        protected $hidden = [
            'password', 'remember_token',
        ];
        public function getJWTIdentifier()
        {
            return $this->getKey();
        }

        /**
         * Return a key value array, containing any custom claims to be added to the JWT.
         *
         * @return array
         */
        public function getJWTCustomClaims()
        {
            return [];
        }
    }
and this my register controller

<?php

namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\User;
use JWTFactory;
use JWTAuth;
use Validator;
use Response;

class APIRegisterController extends Controller
{
    //
    public function register( Request $request){
        $validator = Validator::make($request -> all(),[
         'email' => 'required|string|email|max:255|unique:users',
         'username' =>'required',
         'tel' => 'required',
         'name' => 'required',
         'lastname' => 'required',
         'adress' => 'required',
         'password'=> 'required'
        ]);

        if ($validator -> fails()) {
            # code...
            return response()->json($validator->errors());

        }

        User::create([
            'name' => $request->get('name'),
            'email' => $request->get('email'),
            'tel' => $request->get('tel'),
            'username' => $request->get('username'),
            'lastname' => $request->get('lastname'),
            'adress' => $request->get('adress'),
            'password'=> bcrypt($request->get('password'))
        ]);
        $user = User::first();
        $token = JWTAuth::fromUser($user);

        return Response::json( compact('token'));


    }
}

共有2个答案

黄淇
2023-03-14

这要求用户模型在您的模型中执行此合同:

use Tymon\JWTAuth\Contracts\JWTSubject;

class User extends Model implements JWTSubject {

或者

您必须更新您的用户模型,以实现Tymon\JWTAuth\Contracts\JWTSubject界面:

use Tymon\JWTAuth\Contracts\JWTSubject;

class User extends Model implements JWTSubject{
    /**
     * Get the identifier that will be stored in the subject claim of the JWT.
     *
     * @return mixed
     */
    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    /**
     * Return a key value array, containing any custom claims to be added to the JWT.
     *
     * @return array
     */
    public function getJWTCustomClaims()
    {
        return [];
    }
}
赵星华
2023-03-14

在您的用户模型中实施JWTSubject

class User extends Authenticatable implements JWTSubject
 类似资料:
  • 问题内容: 我正在使用PhantomJS page.evaluate()进行抓取。我的问题是我传递到Webkit页面的代码是沙盒化的,因此无法访问我的主要幻象脚本的变量。这使得很难使抓取代码通用。 如何将参数推入页面? 问题答案: 我遇到了确切的问题。可以使用一些技巧,因为它也可以接受字符串。 有几种方法可以执行此操作,但是我使用了一个称为的包装器,该包装器接受其他参数以传递给必须在Webkit端

  • 问题内容: 是否可以通过以参数作为参数的javascript函数? 例: 问题答案: 使用“关闭”: 这将创建一个匿名的临时函数包装器,该包装器知道该参数并将其传递给实际的回调实现。

  • 问题内容: 我需要一个“接受参数的可运行对象”,尽管我知道这种可运行对象实际上并不存在。 这可能表明我的应用程序设计存在根本缺陷,并且/或者疲倦的大脑中存在智力障碍,因此我希望在这里找到一些建议,以在 不 违反基本OO原则的 情况下 实现以下目标: 任何想法如何完成上述工作? 问题答案: 自从我最初发布此文章至今已经快9年了,说实话,Java从那时起取得了一些进步。我将原始答案留在下面,但无需人们

  • 问题内容: 我们希望在生产部署中缓存崩溃,但不要浪费大量时间来弄清楚这样做的系统。我的想法是将具有当前版本号的paras应用于css和js文件的末尾: 两个问题:这会有效地打破缓存吗?由于参数表明这是动态内容,因此该参数会导致浏览器从不缓存该URL的响应吗? 问题答案: 参数表示查询字符串,因此浏览器将认为这是从到的新路径。因此导致它从文件而不是从缓存加载。如你所愿。 而且,浏览器将假定下次调用时

  • 我能够使用Postman和以下参数调用HTTPendpoint: 但是,我无法通过Android对截击进行同样的操作:这里尝试使用JSONRequest: 这里是尝试StringRequest 当我使用JSONRequest时,会发出调用,但不会传递任何参数;当我使用StringRequest时,会出现以下错误?如何将JSON数据传递给Volley调用? 以下是处理请求的服务器代码

  • 本文向大家介绍PHP 通过参考,包括了PHP 通过参考的使用技巧和注意事项,需要的朋友参考一下 示例 这使您可以通过引用允许您修改原始变量的函数或元素来传递变量。 通过引用传递不仅限于变量,还可以通过引用传递以下内容: 新声明,例如 foo(new SomeClass) 从函数返回的引用 数组 “按引用传递”的常见用法是修改数组中的初始值,而不会涉及创建新数组或乱丢您的命名空间的程度。通过引用传递