【问题标题】:Laravel 5 Social authentification (Facebook)Laravel 5 社交认证 (Facebook)
【发布时间】:2015-07-16 06:45:39
【问题描述】:

我有几个问题无法通过 Laravel official doc 回答。我正在尝试使用我们随处可见的实用 Facebook(或其他 SNS)登录。

我一直在寻找关于它的好教程,但找不到比 that one 更好的教程。

我遵循了它,我想我非常了解这里涉及的过程。

  • 我们的网站转到FB
  • 我们在 FB 上进行身份验证
  • 然后我们被重定向回我们的应用程序。使用保存在某处的“令牌”和用户数据。

然后呢?我们如何访问我们网站的受保护部分?我的意思是我们如何传递我们已经拥有的开箱即用的中间件?

因为我在标准登录页面 (www.mywebsite/auth/login) 上有我的 FB 登录按钮,但是我不太明白我的 service.php 中应该有什么回调?

目前

'facebook' => [
    'client_id' => '12321452415',
    'client_secret' => '675f2d7f77232b0fb20762261db6dcd072',
    'redirect' => 'http://mywebsite/',
],

但是,如果我调用我的主页,我只是因为中间件而再次被重定向到我的登录页面。对吗??我的意思是我做错了什么还是我做得不够?

希望我足够清楚..

非常感谢任何帮助

【问题讨论】:

    标签: php facebook authentication laravel-5


    【解决方案1】:

    您在 services.php 下定义的重定向应该是您网站的路由,比如说 http://website.com/callback ;一旦您在 facebook 上验证了您的请求,您将被重定向回此路线。如果您在没有任何额外权限的情况下使用基本的 facebook 应用程序,那么您将获得用户的 Facebook 名称、fb 个人资料 ID、照片和一些额外的详细信息,如您所引用的教程中所述。您可以利用这些详细信息在您的网站上对用户进行身份验证,例如,您有一个表 users 有一个额外的列,即 fb_id 一旦您从 facebook 收到响应,您检查您的数据库,如果您从响应中获得的 fb_id 存在于数据库中?如果是,则使用

    Auth::loginUsingId($fetched->id);
    {
        return redirect()->to('some-route');
    }
    

    如果你没有得到任何匹配这个 fb_id 的记录,你在数据库中插入一条新记录,然后 loginUsingId

    我希望我对此已经足够清楚了。

    【讨论】:

    • 我想我明白了,我稍后会尝试更新答案:) - 谢谢
    【解决方案2】:

    好的,我确信我可以做得比这更好,但我有一些工作(在挠了几次头之后)

    我的路线:

    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>
    

    欢迎任何改进。 我知道它并不完美,但它可能会对某人有所帮助:)

    【讨论】:

      猜你喜欢
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      • 2017-02-27
      相关资源
      最近更新 更多