11

我有一个使用 OAuth2 执行的 Facebook 登录,然后我使用 Laravel 4 的内置身份验证系统在重新访问时重新登录用户。对于大多数用户,我认为我所拥有的没有任何问题,但对于一位用户,他看到登录时出现以下错误:

ErrorException
Argument 1 passed to Illuminate\Auth\Guard::login() must implement interface Illuminate\Auth\UserInterface, null given
open: */nfs/c09/h04/mnt/139243/domains/crowdsets.com/vendor/laravel/framework/src/Illuminate/Auth/Guard.php
*        /**
        * Log a user into the application.
        *
        * @param  \Illuminate\Auth\UserInterface  $user
        * @param  bool  $remember
        * @return void
        */
       public function login(UserInterface $user, $remember = false)
       {
               $id = $user->getAuthIdentifier();

这是控制器中的相关登录/身份验证代码:

$check = Fan::where('fbid', '=', $user['uid'])->first();

                if(is_null($check)) {

                  $fan = new Fan;

                  $fan->fbid = $user['uid'];
                  $fan->email = $user['email'];
                  $fan->first_name = $user['first_name'];
                  $fan->last_name = $user['last_name'];
                  $fan->gender = $user['gender'];
                  $fan->birthday = $user['birthday'];
                  $fan->age = $age;
                  $fan->city = $city;
                  $fan->state = $state_abbrev;
                  $fan->image = $user['image'];
                  $fan->friend_ids_url = $user['friends'];
                  $fan->friend_ids_unpacked = $friend_ids;

                  $fan->save();

                  $new = Fan::where('fbid', '=', $user['uid'])->first();

                  Auth::login($new);
                  return Redirect::to('fans/home');

                }

               else {

                  Auth::login($check);

                  $fan = Fan::find(Auth::user()->id);
                  $fan->image = $user['image'];
                  $fan->save();

                  return Redirect::to('fans/home');
                  var_dump($user);

               }

这是我用来保存用户信息的表的模型中的代码,称为“粉丝”:

<?php

use Illuminate\Auth\UserInterface;

class Fan extends Eloquent implements UserInterface {
    protected $guarded = array();

    public static $rules = array();

    public function getAuthIdentifier() 
{ 
return $this->getKey(); 
}


public function getAuthPassword() 
{ 
return $this->password; 
}

这非常令人困惑,因为此登录名适用于我尝试过的所有其他配置文件。只有这个朋友的个人资料才会抛出这个错误。我还要补充一点,在登录(或重试)时,它将在数据库/表中为此用户创建多个条目。应该设置此身份验证系统以防止这种情况发生。有什么我想念的吗?

4

6 回答 6

10

在 LoginController 的 create() 方法中,您必须返回对我有用的 $user

protected function create(array $data)
    {
        $user = User::create([
            'username' => $data['username'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);

        return $user;
    }
于 2017-09-04T12:45:05.360 回答
5

尝试将您的代码重构为:

$fan = Fan::where('fbid', '=', $user['uid'])->first();

if (is_null($fan)) {
    $fan = new Fan;

    $fan->fbid = $user['uid'];
    $fan->email = $user['email'];
    $fan->first_name = $user['first_name'];
    $fan->last_name = $user['last_name'];
    $fan->gender = $user['gender'];
    $fan->birthday = $user['birthday'];
    $fan->age = $age;
    $fan->city = $city;
    $fan->state = $state_abbrev;
    $fan->image = $user['image'];
    $fan->friend_ids_url = $user['friends'];
    $fan->friend_ids_unpacked = $friend_ids;

    $fan->save();
} else {
    $fan->image = $user['image'];
    $fan->save();
}

Auth::loginUsingId($fan->getAuthIdentifier());
return Redirect::to('fans/home');
于 2013-09-29T21:05:48.260 回答
2

简单的问题和答案:
你的Fan类是否扩展User类(或实现UserInterface)?
如果没有,那么解决此问题的最简单方法是

class Fan extends User{
    ....
}
于 2013-09-27T08:05:03.900 回答
0

而不是Auth::login($check);或者Auth::login($new);你应该通过,

Auth::login(Auth::user());

Auth::login() 函数接受第一个参数作为 UserInterface 对象,就像public function login(UserInterface $user, $remember = false)在函数体中一样,这将userid像这样$id = $user->getAuthIdentifier();

在此处阅读 API 文档。

于 2013-09-27T03:30:19.433 回答
0

尝试这个。我自己解决了。

$fan = User:where('id',$socialUser->getId())->first();
if(!$fan){
   **$fan** = User:create([
        'facebook_id' => $socialUser->getId(),
        'email' => $socialUser->getEmail()
   ]);
auth()->login($fan);
return return->to('whereYouLike');
}
于 2017-02-24T11:53:19.203 回答
0

我有同样的问题,我设法通过检查几件事来解决它:

Argument 1 passed to Illuminate\Auth\Guard::login() must implement interface Illuminate\Auth\UserInterface, null given open:

  • 如您所见,null given意味着$user您想要的Auth::login($user)为空。检查它设置的变量。
  • 不要var_dump()在 Auth::login 和最终的 redirect() 之间放置任何内容。它可能会停止身份验证。

希望能帮助到你

于 2017-07-06T20:20:35.360 回答