RegisterController.php
我在这里添加了一个更新功能,以便当用户想要使用Facebook登录时,他/她将被重定向到一个表单然后填写字段,以便他们的信息将存储在数据库中 .
protected function create(array $data)
{
if ($data['userEmail']) {
return User::where('email', $data['userEmail'])
->update([
'phone_number' => $data['phone_number'],
'address' => $data['address'],
'country' => $data['country'],
'city' => $data['city'],
'zip_code' => $data['zip_code'],
'state' => $data['state'],
'is_online' => true,
]);
} else {
return User::create([
'full_name' => $data['full_name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'phone_number' => $data['phone_number'],
'address' => $data['address'],
'country' => $data['country'],
'city' => $data['city'],
'zip_code' => $data['zip_code'],
'state' => $data['state'],
'is_online' => true,
]);
}
}
IF语句返回true时的错误是这个
“类型错误:传递给Illuminate \ Auth \ SessionGuard :: login()的参数1必须实现接口Illuminate \ Contracts \ Auth \ Authenticatable,给定整数,在C:\ xampp \ htdocs \ esoftwaredeals \ vendor \ laravel \ framework \中调用第35行的src \ Illuminate \ Foundation \ Auth \ RegistersUsers.php“ .
但是,如果它返回false,则不会出现错误并创建新用户,并且会自动重定向到“/ my-account”页面,这是我想在用户成功更新其信息时重定向的页面 .
2 回答
您需要从
create()
方法返回User
实例:此外,您应该使用updateOrCreate()方法来保持代码的可维护性 . 例如:
更新查询返回受更新查询影响的行数 . 因此,当更新用户成功时,它将返回1 .
create方法返回已保存的模型实例 . 因此,这会导致代码中出现问题 .
您可以使用eloquent提供的查找和保存方法,并在if语句中返回用户对象,它将起作用 .
尝试这样,它应该工作 .