我正在尝试使用Laravel 5.1中的社交网站登录。我已经安装了社交网站,并遵循以下教程:
https://mattstauffer.co/blog/using-github-authentication-for-login-with-laravel-socialite
http://tutsnare.com/social-authentication-in-laravel-5/
我已经按照每一步,当尝试使用Github登录时,它重定向到Github并在登录后重定向到URL回调,但我的问题是它不能将用户数据存储在我的数据库中。
更新-1
现在我的问题是如何使用社交网络对用户进行身份验证。以下是我的代码,但它会抛出一个错误,说明未定义的索引密码。该错误是因为Auth::attempt()
有passsword参数。
if (Auth::attempt(['email' => $email, 'user_id' => $user_id])) {
return redirect()->intended('user/UserDashboard');
} else {
here i am going to insert if user not logged in already
}
更新-2
经过一番研究后,我意识到我需要创建自定义身份验证驱动程序。如果有任何想法请发表您的答案
同一个问题一年前问过
答案 0 :(得分:6)
我首先假设您已经运行php artisan migrate
(并且可能是您的主要问题)。
接下来在将数据存储到数据库时遇到的问题,您是否从类 \App\User
到数据库的工作连接?如果您将其命名为不同的我请求您在第一个\App\[YourClassName]
之后更改该部分。
好的,如果它正常工作,您可能会遇到重新获取数据的问题。只是尝试在某种不同的路线上做这样的事情:
<?php
//Routes.php
Route::get('trygithub', function(){
$user = Socialize::with('github')->user()
dd($user);
});
如果你在屏幕上得到一些输出,那就没关系了。如果您没有得到任何东西,请尝试检查您的github配置。
还有一件事......如果你没有获得所需的输出,请尝试在下面评论。但我非常确定这些肯定能奏效。
更新1回答:
如果您想尝试为您的用户登录,并且您正在使用任何社交个人资料,例如让我们说FB,您需要这样:
这不仅仅是FB的一个案例,你得到一些像Google这样的特定代码,你得到一个刷新令牌代码,在twitter中有一个永久访问令牌和秘密。所以试着去尝试。或者,将一个特定术语作为用户的密码。 str_random()
可能会有所帮助,我强烈建议您使用这两种方式。
更新-2回答:
我不建议通过这个,因为你不会通过重新发明轮子得到任何东西。但是,如果你想要经历这个令人讨厌的过程,here就是这个链接。
http://laravel.com/docs/5.1/authentication#adding-custom-authentication-drivers
答案 1 :(得分:2)
由你来管理。
您可以找到显示您需要的几种方法的an interesting discussion。
从Github重定向后,您应该可以访问详细信息。
$user->getId();
$user->getNickname();
$user->getName();
$user->getEmail();
$user->getAvatar();`
$user->getId()
将是Github返回的唯一ID。
将此字段保存在数据库中的某个位置。如果您想将它们添加到您的用户表,您可以执行以下操作:
$newUser = new \App\User;
$newUser->name=$user->getName();
//Or use the nickname
//$newUser->name=$user->getNickname();
$newUser->email=$user->getEmail();
$newUser->social_id=$user->getId();
$newUser->save();
我不建议这样做,但它应该给你足够的一个例子来使它工作。
当有人尝试使用Github登录时,如果该ID不存在,则为其创建新帐户或抛出错误。
请记住,返回的ID来自Github而不是您的webapp。因此,您的用户将拥有您的Web应用程序的“id”和您存储的“github_id”,以便您知道他们属于哪个用户。
答案 2 :(得分:2)
我们的想法是为每个用户的关联帐户保留一个表格。该表格将包含user id
,social account type
和social account id
。
用户=&gt;有很多“社会账户”
社交帐户=&gt;有一个“用户”
当用户使用社交帐户登录时,我们将使用social account id
和type
搜索社交帐户。获取用户对象并立即登录用户。
如果找不到用户,并且社交网络api返回用户的电子邮件,我们将通过email
获取用户并登录用户,同时将新的社交帐户连接到用户对象。但是我不建议这样做,因为这是一个安全问题,如果有人将他们的社交帐户电子邮件更改为您应用中的现有用户的电子邮件,他可以轻松访问该帐户。
如果上述所有方法都失败,我们需要将用户引导到注册屏幕,我们已经拥有来自社交网络api(如果可用)和email
的{{1}},如果我们需要成功注册后连接。