【问题标题】:Laravel auth, disable passwordLaravel 身份验证,禁用密码
【发布时间】:2018-09-11 01:00:36
【问题描述】:

我正在尝试从我的 laravel 网站禁用密码验证系统。我想只使用他们的名字和姓氏登录我的用户。明智的形式,明智的注册和明智的数据库,密码字段已被完全删除。但是在登录控制器中,我遇到了一些问题,它似乎不起作用。这是我的代码:

public function login(Request $request)
{
  $first_name = $request->first_name;
  $last_name = $request->last_name;

  $user = User::where(['first_name' => $first_name, 'last_name' => $last_name])->first();

  if (!$user) {
    return redirect()->back()->withInput($request->only('first_name', 'last_name'))->withErrors([
        'first_name' => 'We could not find you in our database, if you think this is a mistake kindly contact the site administrators',
    ]);
  }

  Auth::login($user);
  return redirecte('/');

}

在上面的代码中,我收到了错误消息

我们无法在我们的数据库中找到您,如果您认为这是一个错误,请联系网站管理员

无论我在表单中插入什么信息(真或假)。

【问题讨论】:

  • 您是否尝试将if (!$user) 更改为if (empty($user))。这就是我通常用来检查模型是否为空的方法
  • 如果根据您的代码收到该错误意味着,他们不存在具有该名和姓的此类用户

标签: php laravel


【解决方案1】:

首先,您必须检查 first_namelast_name 是否与数据库匹配。

$user = User::where(['first_name' => $first_name, 'last_name' => $last_name])->first()

上面几行有问题。

public function login(Request $request)
{
  $first_name = $request->first_name;
  $last_name = $request->last_name;

  $user = User::where(['first_name' => $first_name, 'last_name' => $last_name])->first();

  if (!$user) {
    return redirect()->back()->withInput($request->only('first_name', 'last_name'))->withErrors([
        'first_name' => 'We could not find you in our database, if you think this is a mistake kindly contact the site administrators',
    ]);
  }

  Auth::loginUsingId($user->id);
  return redirecte('/');

}

【讨论】:

  • 首先你能解释一下你做了什么吗?其次,它没有用。
  • 差异是Auth::loginUsingId($user->id);。但是由于在到达这一行之前就生成了错误消息,所以这并不能解决它。
【解决方案2】:

是的,谢谢@laravel levaral 的回答,但我发现了问题所在。 我要引用 laracasts 中的一位用户

如果您要将多个 where 子句组合到一个 where() 中,则每个子句都需要是它自己的数组,在一个数组中。您正在发送一个数组。您还使用了 =>,这是不正确的。每个 where 语句的参数用逗号分隔。

所以对于想要查看新工作代码的人来说:

public function login(Request $request)
{
  $first_name = $request->first_name;
  $last_name = $request->last_name;

  $user = User::where('first_name', $first_name)
  ->where('last_name', $last_name)
  ->first();

  if (!$user) {
    return redirect()->back()->withInput($request->only('first_name', 'last_name'))->withErrors([
        'first_name' => 'We could not find you in our database, if you think this is a mistake kindly contact the site administrators',
    ]);
  }

  Auth::login($user);
  return redirect('/');

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 2016-10-20
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 2014-05-30
    • 2016-11-20
    相关资源
    最近更新 更多