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,
];
答案 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,
],