如何使用Auth ::在Laravel 5.0中尝试无密码登录?

时间:2016-08-23 13:07:23

标签: php authentication login oauth laravel-5

我使用的是Laravel 5.0。我想只使用用户名(无密码)登录,因为我使用Single Sign On访问我的Laravel项目,因此如果用户成功登录Single Sign On,它将检查我的数据库是否登录用户的用户名已注册或未注册 我整天都在寻找这个,但我仍然找到了线索。

我有一个错误:

  

传递给Illuminate \ Auth \ Guard :: login()的参数1必须实现接口Illuminate \ Contracts \ Auth \ Authenticatable,null给定

如果我在LoginController中使用以下代码:

$user = User::where('USER_NAME', '=', $_GET['UserName'])->first();
if(Auth::login($user)->USER_ID == $_GET['UserName']){
   return redirect('Home');
}

如果我在LoginController中使用以下代码:

if(Auth::attempt(['USER_ID' => $_GET['UserName']])){
   return redirect('Home');
}

我有一个错误:

  

未定义的索引:密码

2 个答案:

答案 0 :(得分:3)

根据文件:

  

将通过电子邮件列的值检索用户。如果找到用户,则会将存储在数据库中的散列密码与通过阵列传递给方法的散列密码值进行比较。

因此,必须在此方法中检查密码,因此它是必需参数。

您可以登录如下:

$user = User::where('USER_NAME', '=', $_GET['UserName'])->first();

if (empty($user)) {
    abort(404);
}

if(Auth::loginUsingId($user->id)){
    return redirect('Home');
}

答案 1 :(得分:1)

您只能通过电子邮件手动验证用户。像这样:

  public function authenticate(Request $request)
     {
               $email=$request->get('email');
               if (Auth::attempt(['email' => $email))
                {     
                    return redirect()->intended('/');   
                }
                else 
                {
                    return redirect('/login');
                }

    }