Laravel 注册后无法登录用户

时间:2021-03-06 06:57:17

标签: php laravel api authentication

Laravel 用户注册后无法登录

当我注册新用户时,它返回成功,但当我尝试登录时,它只返回“登录电子邮件 ID 或密码无效”。我无法弄清楚出了什么问题。它适用于第一个创建的帐户,不适用于新创建的帐户


class CustomerController extends Controller
{
    public function login(Request $request){
        $user           =new Customer;
        $user->email     =$request->email;
        $user->password    =Hash::make($request->password);
        $credentials = $request->only('email', 'password');
        if(Auth::attempt($credentials)) {
            $user = Auth::user();
            $data['token'] = $user->createToken('kla')->accessToken;
            return response()->json([
                'status'    => true,
                'data'      => $data,
                'message'   => ''
            ]);
        }
        else
        {
            return response()->json([
                'status'    => false,
                'data'      => [],
                'message'   => 'login email id or password invalid'
            ]);
        }
    }
    public function register(Request $request){
        $user           =new Customer;
        $user->firstname     =$request->firstname;
        $user->lastname     =$request->lastname;
        $user->email     =$request->email;
        $user->password     =Hash::make($request->password);
        $user->country     =$request->country;
        $user->mobile     =$request->mobile;
        if($user->save()){
            return response()->json([
                'status'    => true,
                'data'      => [],
                'message'   => 'User Registation Successfully'
            ]);
        }
        else{
            return response()->json([
                'status'    => false,
                'data'      => [],
                'message'   => 'User Registation Faild'
            ]);
        }
    }
}

这是客户模型


class Customer extends Authenticatable
{
    use HasFactory, Notifiable ,HasApiTokens;
    protected $fillable = [
        'firstname',
        'lastname',
        'email',
        'password',
        'country',
        'mobile',
    ];
    protected $hidden = [
        'password',
        'remember_token',
    ];
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

这是我的 Config/auth.php

return [
    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
            'hash' => false,
        ],
    ],
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],

         'Customers' => [
             'driver' => 'eloquent',
             'model' => App\Models\Customer::class,
             'table' => 'customers',
         ],
    ],
    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],
    'password_timeout' => 10800,
];

enter image description here enter image description here

2 个答案:

答案 0 :(得分:2)

您的守卫都没有设置为使用此 Customer 模型,因为他们都没有使用您的 Customers 提供程序设置;从这里开始,它将被重命名为小写版本 customers。在这种情况下,守卫的“提供者”密钥需要为 customers

'guards' => [
    ...
    'api' => [
        'driver' => 'passport',
        'provider' => 'customers',
        'hash' => false,
    ],
],
'providers' => [
    ...
    'customers' => [
        'driver' => 'eloquent',
        'model' => App\Models\Customer::class,
    ],
],

此外,在调用身份验证系统时,除非另有说明,否则它将使用默认保护。因此,无需指定您当前正在使用 web 防护。如果要使用 api 保护设置为使用的“passport”驱动程序,则必须调整默认值或指定以下内容:

Auth::guard('api')->....

答案 1 :(得分:1)

在你的配置文件中你应该定义提供者

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'customers',
        ],

        'api' => [
            'driver' => 'passport',
            'provider' => 'customers',
            'hash' => false,
        ],