我知道有时我们的客户拥有的表只是奇怪的,所以如果这是您的情况,请创建一个单独的类来处理您需要的任何类型的登录:
class Logon {
public function loginViaEmail($email, $password)
{
if ($emailModel = Email::where('email', $email)->first())
{
return $this->login($emailModel->user_id, $password);
}
return false;
}
public function loginViaName($name, $password)
{
if ($memberModel = Member::where('name', $name)->first())
{
return $this->login($memberModel->user_id, $password);
}
return false;
}
public function loginViaId($id, $password)
{
if ($beingModel = Being::where('id', $id)->first())
{
return $this->login($beingModel->user_id, $password);
}
return false;
}
public function login($id, $password)
{
$user = Member::find($id);
if(Hash::check($password, $user->password))
{
Auth::loginUsingId($id);
return true;
}
return false;
}
}
login() 负责将用户登录到您的应用程序,就像 Laravel 在内部使用 Auth::attempt() 所做的工作一样,因此此后一切都将正常工作。
现在您可以在控制器中执行此操作:
$logon = new Logon;
if ( ! $logon->loginViaEmail(Input::get('email'), Input::get('password')))
{
return "username or password invalid";
}
return "logged in successfully";
或
...
if ( ! $logon->loginViaName(Input::get('name'), Input::get('password')))
...