Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查用户输入的登录信息是否正确?_Php_Laravel - Fatal编程技术网

Php 如何检查用户输入的登录信息是否正确?

Php 如何检查用户输入的登录信息是否正确?,php,laravel,Php,Laravel,我正在尝试创建一个登录页面,如果用户名或密码错误,我会告诉试图登录的人是错误的用户名或密码 这是我在LoginController中的登录函数,我尝试添加带有Auth::trunt的if语句,但由于发送的是对象而不是数组,因此出现了错误。是否有方法同时进行验证和检查。我所看到的例子根本无法验证 protected function validateLogin(Request $request) { $request->validate([ $this->username(

我正在尝试创建一个登录页面,如果用户名或密码错误,我会告诉试图登录的人是错误的用户名或密码

这是我在LoginController中的登录函数,我尝试添加带有
Auth::trunt
的if语句,但由于发送的是对象而不是数组,因此出现了错误。是否有方法同时进行验证和检查。我所看到的例子根本无法验证

protected function validateLogin(Request $request)
{
  $request->validate([
    $this->username() => 'required|string',
    'password' => 'required|string',
  ]);

  if(Auth::attempt($request)) {
    return redirect()->intended('dashboard');
  }
}
在my Login.vue中,我的规则设置如下:

rules: {
    username: {required: true, message: 'Required', trigger: 'blur',},
    password: {required: true, message: 'Required', trigger: 'blur'},
},
我怎么能两者兼得呢

要显示错误,这是我的代码

<el-row v-if="errors && Object.keys(errors).length > 0" class="mb-2">
    <el-col :span="24">
        <el-alert
            v-for="(value, key, index) in errors"
            v-bind:key="index"
            :title="value[0]"
            type="error"
            center
            :closable="false"
            effect="dark">
        </el-alert>
    </el-col>
</el-row>
理想情况下,我希望通过发送自定义消息,因为我的页面使用另一种语言。也许在vue中的submit方法中有一种方法

submit() {
    this.$refs.form.validate((valid) => {
        if (valid) {
            this.loading = true;
            this.$inertia.post('/login', {
                scard: this.form.scard,
                password: this.form.password,
            }).then(() => this.loading = false);
        } else {
            return false;
        }
    });
},

你的代码非常接近!问题在于,
$request
确实是一个对象。但是,如果使用
$request->all()
,则将有一个包含当前请求中所有数据的数组:

protected function validateLogin(Request $request)
{
  $request->validate([
    'username' => 'required|string',
    'password' => 'required|string',
  ]);

  if(Auth::attempt($request->all())) {
    return redirect()->intended('dashboard');
  }

  return response()->json(['error' => 'Oops! Your login failed. Verify your username & password and try again.'], 401);
}

更新

查看前端代码很有帮助。以下是如何处理失败的登录:

submit() {
  this.$refs.form.validate((valid) => {
    if (valid) {
      this.loading = true;
      this.$inertia.post('/login', {
        scard: this.form.scard,
        password: this.form.password,
      })
      .then(() => this.loading = false)
      .catch(() => {
        this.errors = {
          'credentials' => ['Your login failed! Please verify your credentials and try again.']
        };
      });
    } else {
      return false;
    }
  });
},

你的代码非常接近!问题在于,
$request
确实是一个对象。但是,如果使用
$request->all()
,则将有一个包含当前请求中所有数据的数组:

protected function validateLogin(Request $request)
{
  $request->validate([
    'username' => 'required|string',
    'password' => 'required|string',
  ]);

  if(Auth::attempt($request->all())) {
    return redirect()->intended('dashboard');
  }

  return response()->json(['error' => 'Oops! Your login failed. Verify your username & password and try again.'], 401);
}

更新

查看前端代码很有帮助。以下是如何处理失败的登录:

submit() {
  this.$refs.form.validate((valid) => {
    if (valid) {
      this.loading = true;
      this.$inertia.post('/login', {
        scard: this.form.scard,
        password: this.form.password,
      })
      .then(() => this.loading = false)
      .catch(() => {
        this.errors = {
          'credentials' => ['Your login failed! Please verify your credentials and try again.']
        };
      });
    } else {
      return false;
    }
  });
},

$this->username()
是否返回
“username”
?原因您的规则应该是
“username”=>“required | string”
。另外,
Auth::trunt()
需要一个
凭证数组,而不是整个
$request
对象,因此只使用
$request->(“用户名”、“密码”)
通知用户凭证整体不正确就足够了(默认响应失败)。如果你再进一步,你给出的是关于有效用户名的信息。@lagbox是的,这是一个很好的观察,我只想显示正常的
登录失败。再试一次。
@NancyGomez我已更新了答案,以显示如何在登录失败时显示错误消息。
$this->username()
是否返回
“username”
?原因您的规则应该是
“username”=>“required | string”
。另外,
Auth::trunt()
需要一个
凭证数组,而不是整个
$request
对象,因此只使用
$request->(“用户名”、“密码”)
通知用户凭证整体不正确就足够了(默认响应失败)。如果你再进一步,你给出的是关于有效用户名的信息。@lagbox是的,这是一个很好的观察,我只想显示正常的
登录失败。再试一次。
@NancyGomez我已更新了我的答案,以显示如何在登录失败时显示错误消息。我现在如何向用户发送消息,说明哪个错误?现在它只是不登录,也不显示错误或消息,我只是手动处理。如果您的登录请求失败,请手动向用户显示一条消息,内容为“哎呀!您的登录失败了。请验证您的用户名和密码,然后重试。”这是我在不查看您的JS的情况下所能提供的最好消息。实际上,我收回了这条消息。您需要从这个函数返回一个错误响应,以便在JavaScript端处理它。请参阅上面我的编辑。这对我不起作用,提交按钮只是显示为加载,然后停止加载,没有出现错误弹出,我甚至尝试在我的提交方法中的某个位置添加错误,但没有成功?当然,如果您没有编写任何会弹出错误的代码,则不会出现错误弹出。。。如果没有看到你的JavaScript,我会情不自禁。我现在如何向用户发送一条消息,说明哪一条是错误的?现在它只是不登录,也不显示错误或消息,我只是手动处理。如果您的登录请求失败,请手动向用户显示一条消息,内容为“哎呀!您的登录失败了。请验证您的用户名和密码,然后重试。”这是我在不查看您的JS的情况下所能提供的最好消息。实际上,我收回了这条消息。您需要从这个函数返回一个错误响应,以便在JavaScript端处理它。请参阅上面我的编辑。这对我不起作用,提交按钮只是显示为加载,然后停止加载,没有出现错误弹出,我甚至尝试在我的提交方法中的某个位置添加错误,但没有成功?当然,如果您没有编写任何会弹出错误的代码,则不会出现错误弹出。。。我不能不看你的JavaScript。