使用Laravel Socialite

时间:2018-02-02 21:21:21

标签: php laravel security authentication laravel-socialite

我在Laravel App中使用Socialite进行社交网络身份验证。我想使用社交网络添加注册,无法通过输入用户名和密码来使用经典注册方法。目前,我决定创建一个包含名称和用户名的User模型,用于uathorization,并在db中为每个包含user_id和社交网络ID的社交网络中的单独表格作为PK。

当系统在所选社交网络中收到用户的ID时,它会检查相应的表中是否存在该ID,如果存在,则获取用户ID并向系统验证用户身份。如果没有 - 在那里添加并进行身份验证。

处理来自社交网络的响应的函数:

public function handleProviderCallback($social)
{
    $userSocial = Socialite::driver($social)->user();

    $registeredUser = DB::table($social.'_accounts')->find($userSocial->id);

    if(!empty($registeredUser)) {
        Auth::loginUsingId($registeredUser->user_id);
    }else{
        $user = new User;
        $user->name = $userSocial->name;
        $user->username = 'user2222'; //will be implementer in future
        $user->avatar = $userSocial->avatar;
        $user->save();

        DB::table($social.'_accounts')->insert(['id' => $userSocial->id, 'user_id' => $user->id ]);
        Auth::loginUsingId($user->id);
    }

        return redirect()->action('HomeController@index');
}

问题是关于安全性,你能否解释一下这个解决方案是否相当安全?我的意思是没有密码的身份验证,以防万一从社交网络接收用户的ID。是否可以伪造来自社交网络的查询以获取对smb'帐户的访问权限?

1 个答案:

答案 0 :(得分:1)

由于您使用的是oAuth,因此这是用户身份验证的首选方法。

由于您使用的是Socialite,因此它会自动检查提供程序以防止发出虚假请求。 因此,这将被认为是安全的。