【发布时间】:2019-12-11 04:57:22
【问题描述】:
我是 laravel 的新手,正在制作身份验证系统,用户可以使用 facebook、twitter 或简单的电子邮件登录
我做了两张桌子
1 个用户
2-user_social_accounts
它们之间是一对多的关系(一个用户可以有多个社交帐户)。
型号详情
用户模型
public function user_social_accounts()
{
return $this->hasMany('App\UserSocialAccount');
}
UserSocialAccount 模型
public function user()
{
return $this->belongsTo('App\User');
}
现在是逻辑
案例1-
-如果用户首次使用电子邮件注册,则将创建一条新记录
- 如果用户使用 facebook 登录,那么他的电子邮件将存储到 user 表中,而 facebook 数据将存储在 user_social_accounts 表中
- 如果用户再次使用同一电子邮件与 twitter 登录,则将在 user_social_accounts 中创建一条新记录
案例2-
-如果用户首次使用社交网站登录并且该电子邮件不存在他的记录,则首先他的电子邮件将存储在user表中,然后facebook数据将存储在user_social_accounts表中
-如果用户再次使用相同的电子邮件注册(简单登录),那么我将更新数据库中的电子邮件记录(如果存在)。
所以就像如果不存在则创建,如果存在则更新(基于电子邮件)。
我非常接近,但从过去 1 天开始就卡住了
这是我的身份验证控制器
public function facebook_login(Request $request) {
$validator = Validator::make($request->all(), [
'first_name' => 'required',
'last_name' => 'required',
'photo' => 'required',
'email' => 'required|email',
'facebook_id' => 'required',
'fcm_token' => 'required'
]);
if($validator->fails()){
$status = 0;
$data['message'] = $validator->errors();
return response()->json(['status' => $status,'data' => $data], 401);
}
$input = $request->all();
$user = User::updateOrCreate(['email' => $input['email']],$input);
$user = User::find($user['id']);
$account_details = new UserSocialAccount();
$account_details->first_name = $input['first_name'];
$account_details->last_name = $input['last_name'];
$account_details->photo = $input['photo'];
$account_details->provider_id = $input['facebook_id'];
$account_details->provider_name = 'facebook';
$account_details->fcm_token = $input['fcm_token'];
$input['provider_name'] = 'facebook';
//the following line is saving new records and not updating them
$user->user_social_accounts()->save($account_details);
}
下面一行是保存新记录而不是更新它们
$user->user_social_accounts()->save($account_details);
请指导我,我很担心。感谢并提前对任何愚蠢的问题表示抱歉。
【问题讨论】:
标签: php laravel eloquent laravel-5.8