Php 如何在Laravel中手动登录用户?

Php 如何在Laravel中手动登录用户?,php,laravel,login,Php,Laravel,Login,这是我的密码: public function register_and_login(Request $request) { $this->validator_short($request->all())->validate(); $user = User::where('cell_phone', $request->cell_phone)->first(); // already registered if ( is_null(

这是我的密码:

public function register_and_login(Request $request)
{
    $this->validator_short($request->all())->validate();

    $user = User::where('cell_phone', $request->cell_phone)->first();

    // already registered
    if ( is_null($user) ) {
        $user_id = User::create([
                    'name' => $request->name,
                    'cell_phone' => $request->cell_phone,
                    'password' => bcrypt($request->password),
        ]);
    } else {
        $user_id = $user->id;
    }

    $this->guard()->login($user_id);

    dd('user is logged in now');
}
我的代码在用户尚未注册并且我们创建了它的情况下工作。但当他已经注册时,我的代码会抛出以下错误:


如何修复它?

确保
用户
模型扩展
可验证

use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
另外,使用
auth()
helper或
auth::
facade:

$user = User::create(['name' => $request->name,
    'cell_phone' => $request->cell_phone,
    'password' => bcrypt($request->password)
]);
auth()->login($user);

确保
用户
型号扩展了
可验证性

use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
另外,使用
auth()
helper或
auth::
facade:

$user = User::create(['name' => $request->name,
    'cell_phone' => $request->cell_phone,
    'password' => bcrypt($request->password)
]);
auth()->login($user);

将您的else部分更改为-

else {
    $user_id = $user;
}

将您的else部分更改为-

else {
    $user_id = $user;
}

登录函数不是要求您输入整数id,而是要求输入可验证的id。在任何默认的Laravel应用程序中,这通常是用户模型

问题在于你的else陈述。检查单元格编号时,不需要将$user\u id设置为加载的用户的id。您只需要使用您加载的用户。根据您的逻辑,您甚至不需要else语句

逻辑中可能存在的另一个问题是,您正在检查单元号是否存在,如果存在,则登录该用户,而不是您进行检查的用户。这可能是人们想要的行为,但似乎不是

public function register_and_login(Request $request)
{
  $this->validator_short($request->all())->validate();

  $user = User::where('cell_phone', $request->cell_phone)->first();

  // already registered
  if ( is_null($user) ) {
    $user = User::create([
                'name' => $request->name,
                'cell_phone' => $request->cell_phone,
                'password' => bcrypt($request->password),
    ]);
  }

 $this->guard()->login($user);

}

登录函数不是要求您输入整数id,而是要求输入可验证的id。在任何默认的Laravel应用程序中,这通常是用户模型

问题在于你的else陈述。检查单元格编号时,不需要将$user\u id设置为加载的用户的id。您只需要使用您加载的用户。根据您的逻辑,您甚至不需要else语句

逻辑中可能存在的另一个问题是,您正在检查单元号是否存在,如果存在,则登录该用户,而不是您进行检查的用户。这可能是人们想要的行为,但似乎不是

public function register_and_login(Request $request)
{
  $this->validator_short($request->all())->validate();

  $user = User::where('cell_phone', $request->cell_phone)->first();

  // already registered
  if ( is_null($user) ) {
    $user = User::create([
                'name' => $request->name,
                'cell_phone' => $request->cell_phone,
                'password' => bcrypt($request->password),
    ]);
  }

 $this->guard()->login($user);

}

用户
模型与您描述的完全相同。另外,我添加了
use-illumb\Foundation\Auth\RegistersUsers在我的控制器顶部。我想这个错误很可能是因为it@MartinAJ如果您更改了登录名($user\u id)
->登录($user)如我所示,并且
用户
模型扩展了
可验证性
,这将起作用。如果您在这些更改后收到错误消息,那么肯定是另一个错误消息。请拿出来,我没有发现任何错误。但是登录没有发生。
auth()->login($user)的结果
null
@MartinAJ请尝试执行
auth()->登录($user,true)
并将
dd(auth()->user())
放在此行之后。如果用户经过身份验证,它将向您显示
User
对象;如果用户未通过身份验证,它将向您显示
null
User
模型与您描述的完全相同。另外,为了供您参考,我添加了
use-illumb\Foundation\Auth\RegistersUsers在我的控制器顶部。我想这个错误很可能是因为it@MartinAJ如果您更改了登录名($user\u id)
->登录($user)如我所示,并且
用户
模型扩展了
可验证性
,这将起作用。如果您在这些更改后收到错误消息,那么肯定是另一个错误消息。请拿出来,我没有发现任何错误。但是登录没有发生。
auth()->login($user)的结果
null
@MartinAJ请尝试执行
auth()->登录($user,true)
并将
dd(auth()->user())
放在此行之后。如果用户经过身份验证,它将向您显示
User
对象;如果用户未通过身份验证,它将向您显示
null
。没有任何更改您是否已更改为
$User\u id=$User
?没有任何更改您是否已更改为
$User\u id=$User
??