我有内置的laravel和社交身份验证。假设用户使用Facebook登录,我将用户详细信息(例如fb_id
,username
,email
等存储到用户表中,该表可从内置登录系统进行验证。这种方式我可以使用laravel Auth
。
$fb_user = Socialite::driver('facebook')->user();
$user = User::firstOrCreate(['fb_id'=>$fb_user->id,'name' => $fb_user->name, 'email' => $fb_user->email]);
Auth::login($user, true);
return redirect('/');
现在,users表的用户名和密码为NULL。如果不需要密码验证,那么任何人都无法使用内置登录的用户名登录吗?或者我的概念在这里出了什么问题?
答案 0 :(得分:0)
如果不是,任何人都无法使用内置登录名中的用户名登录 密码验证是否必需?
是的,任何人都可以登录。
来自评论:
解决方案1:
应该对密码进行哈希处理。假设允许使用空密码,它们将散列为非空的内容(例如,password_hash('',PASSWORD_DEFAULT);
返回类似$2y$10$MD7HZwh9oki9U74Ta1/7OuDpYK8UXAFEufgMIeNazKSyv1xRabwqu
的内容)因此,这应该没有真正的问题方法。
解决方案2:
我们应该有一个字段来标记用户来自单独的身份验证源。这样,如果有人尝试使用这些详细信息直接登录,您可以在检查凭据时忽略带有该标志的行
答案 1 :(得分:-3)
最近我遇到了同样的问题。我推荐这个:
当用户选择社交媒体登录您的网站时,请使用您在认证后从社交媒体网站获得的信息在您的网站中创建他们的帐户,并将其登录到您的网站。现在,只要他们登录,就会向他们显示一个弹出窗口,为他们的帐户设置密码。
现在开启,然后可以使用Laravel内置和社交身份验证进行登录。