【问题标题】:Laravel 4 jenssegers-mongodb - how can I implement Auth with facebookLaravel 4 jenssegers-mongodb - 如何使用 facebook 实现 Auth
【发布时间】:2014-01-06 05:42:50
【问题描述】:

我现在需要帮助,我无法使用 facebook 登录,让我们看看我的代码。

$code = Input::get('code');
if (strlen($code) == 0) 
    return Redirect::to('/')->with('message', 'There was an error communicating with Facebook');

$facebook = new Facebook(Config::get('facebook'));
$uid = $facebook->getUser();

if ($uid == 0) 
    return Redirect::to('/')->with('message', 'There was an error');

$me = $facebook->api('/me');

$existing_user = User::whereFBid($uid);

if (empty($existing_user))
{
    $user['name'] = $me['first_name'].' '.$me['last_name'];
    $user['email'] = $me['email'];
    $user['photo'] = 'https://graph.facebook.com/'.$me['username'].'/picture?type=large';

    $user['fbid'] = $uid;
    $user['username'] = $me['username'];
    $user['access_token'] = $facebook->getAccessToken();

    $rsUser = User::registerUser($user);
}
else
{
    $user = new User();
    $user->fbid = $uid;
    Auth::login($user);
}

return Redirect::to('/')->with('message', 'Logged in with Facebook');

我的路线文件

Route::get('/', function()
{
    $data = array();

    if (Auth::check())
    {
        $data = Auth::user();
        var_dump($data);exit;
    }
    else
    {
        echo 'auth check failed';exit;
    }

    return View::make('hello', array('data'=>$data));
});

我的用户模型已经添加使用 Jenssegers\Mongodb\Model 作为 Eloquent

Auth::login($user) 它通过了,但是当我的代码重定向到 '/' 并且 Auth::check() 它不起作用时会出现其他情况。我该如何解决,有人可以帮忙吗?非常感谢,对不起我的英语。

【问题讨论】:

    标签: facebook mongodb laravel laravel-4 jenssegers-mongodb


    【解决方案1】:

    在您的 else 语句中,您重新实例化了用户,但这对我来说没有意义。在您的 if 语句之前,您正在尝试查找用户。然后是您的 if 语句,用于当用户不存在时。然后是你的 else 声明,当用户确实存在时。所以你不必创建一个新的用户模型:

    else
    {
        $user = new User();
        $user->fbid = $uid;
        Auth::login($user);
    }
    

    但您必须使用 $existing_user 变量才能登录。

    else
    {
        Auth::login($existing_user);
    }
    

    【讨论】:

    • 方法 whereFBid 在我的模型中是公共静态函数 whereFBid($fbid) { $rsUser = DB::collection('users') ->where('fbid', $fbid) ->first( );返回 $rsUser;我根据你的建议做我的控制器,但这是错误的:传递给 Illuminate\Auth\Guard::login() 的参数 1 必须实现接口 Illuminate\Auth\UserInterface,给定数组
    • 这是为什么呢?好的,忽略这个静态方法。请阅读:laravel.com/docs/eloquent#query-scopes 或更改“$existing_user = User::whereFBid($uid);”到“$existing_user = User::where('fbid', '=', $uid)->first();”然后再试一次。在模型中使用静态方法可能不是(也永远不会是)要走的路。
    猜你喜欢
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 2018-12-28
    • 2017-06-15
    • 2020-02-04
    • 2014-06-30
    • 2017-05-21
    相关资源
    最近更新 更多