我有一些问题无法用Laravel official doc回答。我正在尝试使用我们在任何地方看到的实用Facebook(或其他SNS)登录信息。
我曾经找过一篇关于它的好教程,但我找不到比that one更好的内容。
我跟着它,我想我非常了解这里涉及的过程。
但那又怎么样?我们如何访问我们网站的受保护部分?我的意思是我们如何通过我们已经拥有的开箱即用的中间件?
因为我在标准登录页面(www.mywebsite / auth / login)上有我的FB登录按钮,但是我不太了解的是我的service.php应该回调什么?
目前
'facebook' => [
'client_id' => '12321452415',
'client_secret' => '675f2d7f77232b0fb20762261db6dcd072',
'redirect' => 'http://mywebsite/',
],
但是当然如果我打电话给我的主页面,我因为中间件而被重新定向到我的登录页面..对吗?我的意思是我做错了什么或者我做得还不够?
希望我足够清楚..
非常感谢任何帮助
答案 0 :(得分:1)
您在services.php下定义的重定向应该是您网站的路线,可以说http://website.com/callback;一旦您在Facebook上验证了您的请求,您将被重定向回此路线。如果您正在使用基本的Facebook应用程序而没有任何额外的权限,那么您将获得用户的Facebook名称,fb个人资料ID,照片以及您提到的教程中提到的一些额外细节。您可以利用这些详细信息对您网站上的用户进行身份验证,例如,您有一个额外列的表用户,即fb_id,一旦您从Facebook获得响应,如果您从响应中获得的fb_id存在于数据库中,则检查您的数据库?如果是,那么使用
Auth::loginUsingId($fetched->id);
{
return redirect()->to('some-route');
}
如果你没有得到任何与这个fb_id匹配的记录,你在数据库中插入一条新记录,然后登陆用户
我希望我对此很清楚。
答案 1 :(得分:0)
好的,我相信我能做得比这更好但我有一些工作(在抓了几次之后)
我的路线:
Route::get('connect/{provider}', 'AccountController@redirectToProvider');
Route::get('account/{provider}', 'AccountController@handleProviderCallback');
我的控制员:
class AccountController extends Controller {
public function redirectToProvider($provider) {
return Socialize::with($provider)->redirect();
}
public function handleProviderCallback($provider) {
$user = Socialize::with($provider)->user();
// Define the SNS variable
$id = $user->getId();
$name = $user->getName();
$email = $user->getEmail();
$avatar = $user->getAvatar();
// check if the user exists in the DB already
$users = DB::table('users')->where($provider.'_id', $id)->first();
// if the user doesn't exist insert a new record and get the user_id
if(empty($users)){
DB::table('users')->insert(
['name' => $name,'email' => $email,'profile_picture' => $avatar,$provider.'_id' => $id]
);
$users = DB::table('users')->where($provider.'_id', $id)->first();
}
// use the auth facade to login with the user ID
Auth::loginUsingId($users->id);
{
// redirect to the home page
return redirect()->to('/');
}
}
}
我的登录页面:
<a href="{!!URL::to('connect/facebook')!!}">Login with Facebook</a><br>
<a href="{!!URL::to('connect/twitter')!!}">Login with Twitter</a><br>
<a href="{!!URL::to('connect/google')!!}">Login with Google</a>
欢迎任何改进。 我知道它并不完美,但可能对某人有所帮助:)。