2016-12-05 78 views
0

我有两个laravel内置和社会认证。假设如果在使用Facebook的用户登录后,我存储用户的细节,如fb_idusernameemail等方式向用户表,该表是从真伪内置登录system.This方式,我可以使用laravel Auth利用社会authenticaion细节登录由内置的登录系统

$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('/'); 

现在,用户表中有一个用户名和密码为NULL的用户。如果不需要密码验证,任何人都无法使用内置登录用户名登录?或者我的概念在这里有什么问题?

+0

我不知道Laravel,但我非常确定在这种情况下,您的应用程序只是获取令牌facebook说明用户是否有效。只有Facebook会看到实际的凭据。它被称为联合身份。这是一件好事。你会很高兴与很多随机的,可能不安全的网站存储您的Facebook的凭据?如果您存储用户的凭证,您将如何处理它,以及如何知道他们是否更改了密码,或该账户是否过期? Facebook为你处理所有这些,你需要的只是他们的“是/否”答案。 – ADyson

+0

希望你哈希密码。假设允许使用空密码,它们将散列到非空的地方(例如,'password_hash('',PASSWORD_DEFAULT);'返回类似'$ 2y $ 10 $ MD7HZwh9oki9U74Ta1/7OuDpYK8UXAFEufgMIeNazKSyv1xRabwqu')因此,应该没有真正的问题你的方法。 –

+0

@ADYSON我不是要求FB给我提供密码。如果我将他们的ID,电子邮件,名称留在我的应用程序数据库的可验证表中的空白密码。难道它不能从普通的登录表单登录吗?或者我应该只是不存储任何fb用户详细信息在可验证的表中? –

回答

0

如果没有 需要密码验证,不能用任何用户名从内置登录名登录吗?

是任何人都可以登录。

从评论:

解决方案1:

密码应hashed.Assuming空密码是允许的,他们会出现乱码的东西,不为空(例如,password_hash('',PASSWORD_DEFAULT);回报像$2y$10$MD7HZwh9oki9U74Ta1/7OuDpYK8UXAFEufgMIeNazKSyv1xRabwqu‌​ )因此,这种方法应该没有真正的问题。

解决方案2:

我们应该有一个字段来标记用户从一个单独的认证源之中。这样,如果有人试图直接使用这些详细信息登录,则可以在检查凭据时忽略具有该标志的行

-3

最近我得到了同样的问题。我推荐:

当用户选择社交媒体登录到您的网站时,使用您从社交媒体网站获得的信息在您的网站上创建他们的帐户后,将其登录到您的网站。现在,只要他们登录,向他们展示一个弹出窗口,为他们的帐户设置密码。

现在,那么可以同时使用Laravel内置和登录社交认证。

+1

这肯定会使用社交登录来击败他们 - 现在他们在您的网站上还有另一个帐户,以及他们的社交帐户。 – ADyson

+0

@ADyson你是说,允许用户使用他们的社交账户登录到你的网站,但不要创建他们的实物账户?如果您没有在您的网站上创建自己的帐户,您将如何登录?疯了吧。据我所知,当您使用社交媒体登录任何网站时,他们也会在其网站上创建一个新帐户。 –

+0

我不是说不创建任何记录,但为什么要求他们输入密码?他们选择通过社交登录,这意味着他们不想被困扰在您的网站上创建直接帐户,并且他们不想管理单独的登录名和密码。只需创建您需要的最低限度的详细信息并将其与社交帐户ID相关联即可。如果他们能够以两种不同的方式登录,无论如何这只是令人困惑。 – ADyson