我正在寻找一种方法,让一个不存在的用户不要以与不存在用户相同的方式登录



我正在使用Laravel 6,寻找一种不以登录屏幕上不存在的用户相同的方式登录的方法。

我在users表中添加了一列,该表由默认的userauth函数创建。

列类型是";布尔值";。它的名字是";有效";。

当一个用户有一个错误的";有效的";列尝试登录,然后我想在登录屏幕上说";用户不存在">

login.blade.php

<div class="col-md-6">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>

当无效用户尝试登录时;此帐户无效";到$消息并显示它。

您可以使用指令来检查用户的valid的状态。像这样的东西。

if (Auth::user()->valid) return redirect("yourAfterLoginRoute");
return redirect("yourFailAfterLoginRoute");

在您的LoginController中尝试此操作。

protected function credentials(Request $request)
{
$arr = $request->only($this->username(), 'password');
$arr['valid'] = true;
return $arr;
}

您可以使用Laravel中间件来实现这一点。

中间件提供了一种方便的检查和过滤机制HTTP请求进入您的应用程序。例如,Laravel包括验证应用程序用户的中间件经过身份验证。如果用户未通过身份验证,中间件将将用户重定向到应用程序的登录屏幕。但是,如果用户已通过身份验证,中间件将允许请求继续进行应用程序。

好吧,你可以设置一个中间件来负责撤销/重定向"无效用户">

以下是一些步骤,可以为您指明建议的方向。

步骤1

生成中间件:php artisan make:middleware RevokeInvalidUser

您可以在AppHttpMiddleware目录中找到中间件。

步骤2

添加撤销/重定向的逻辑";无效用户">在新中间件的CCD_ 4方法中。

// RevokeInvalidUser middleware.
<?php
namespace AppHttpMiddleware;
use AppModelsUser;
use Closure;
use IlluminateHttpRequest;
class RevokeInvalidUser
{
/**
* Handle an incoming request.
*
* @param IlluminateHttpRequest $request
* @param Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if (
($request->method() === "POST")
&& ($request->path() === "login")
&& ($user = User::firstWhere("email", $request->email))
&& !$user->valid
) {
return redirect()
->back()
->with(["acInvalidMessage" => "This account is invalid."])
->withErrors([
"email" => "The user does not exist."
]);
}
return $next($request);
}
}

步骤3

AppHttpKernel.php类文件的protected $middlewareGroups数组中注册中间件。

<?php
namespace AppHttp;
use IlluminateFoundationHttpKernel as HttpKernel;
class Kernel extends HttpKernel
{
// ...
protected $middlewareGroups = [
'web' => [
// ...

AppHttpMiddlewareRevokeInvalidUser::class,
],

// ...  
}

步骤4

演示:用于访问";此帐户无效">消息在视图中,进行此小调整:

// Instead of:
<strong>{{ $message }}</strong> ❌
// Use this:
<strong>{{ session()->get('acInvalidMessage') ?? "" }}</strong> ✅

附录

注意:只有当您没有";有效的">列已经存在

如果您还没有创建/添加标记为";有效的";在users表上,可以通过运行迁移来创建它。即:

  1. 通过在终端中运行以下命令来添加迁移

php artisan make:migration add_valid_column_on_users_table

  1. 打开在your-project-root-directory/database/migrations中找到的迁移文件。使用相关代码行对其进行编辑
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
class AddValidColumnOnUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table("users", function (Blueprint $table) {
$table->boolean("valid")->after("email")->default(true);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}
  1. 使用以下命令对数据库运行最近创建的迁移

php artisan migrate

  1. 通过使一些用户无效来测试实现。(在users表上将特定用户的"有效"数据库列值更改为0。(

相关内容

最新更新