php - 如何在 Laravel 5 中有条件地要求身份验证?

标签 php authentication laravel laravel-5

我有一个使用 Laravel 5 开箱即用身份验证的应用程序。仅当名为“approved”的字段等于 1 时,我才需要对 Controller 的 show 方法进行身份验证。

如何有条件地要求使用中间件进行身份验证,以便未经身份验证的用户可以访问批准列等于 1 的条目,但只有经过身份验证的用户才能看到批准列等于 0 的条目。

我的构造函数当前如下所示:

public function __construct(){
    $this->middleware('auth', ['only' => ['edit', 'destroy', 'approve', 'markRecovered']]);
}

最佳答案

您可以创建自己的中间件而不是使用 Laravel默认auth中间件,在这种情况下,您可以使用如下内容创建一个中间件,例如“checkApproval”:

php artisan make:middleware checkApproval

然后在你的app/Http/Middleware中您将在目录中找到创建的新中间件,它将包含基本结构,包括 handle方法,所以现在您可以在该中间件的 handle 中编写代码检查user的方法的状态和approved字段,然后重定向到 login如果条件不匹配或不允许访问,则返回页面。这是一个基本想法:

use Illuminate\Contracts\Auth\Guard;

class CheckPermission implements Middleware {

    protected $auth;

    public function __construct(Guard $auth)
    {
        $this->auth = $auth;
    }

    public function handle($request, Closure $next)
    {
        if($this->auth->guest() && !$this->checkApproval($request))
        {
            return redirect('login');
        }

        return $next($request);
    }

    protected function checkApproval($request)
    {
        // Get the auth/logged in user
        // $user = $request->user();

        // Get a parameter from route
        // $id = $request->route()->parameter('id') 

        // Check the approved field here and return true or false
    }
}

现在在 app/Http/Kernel.php 中为中间件分配一个快捷键文件。默认情况下,$routeMiddleware此类的属性包含 Laravel 中包含的中间件的条目。 。要添加您自己的,只需将其附加到此列表并为其分配 key在您的 route/controller 中使用,例如 checkApproval所以代替auth您可以使用checkApproval对于该方法view在你的 Controller 中。

这是一个抽象的想法,但您现在可以实现自己的想法,所以 check the documentation了解更多信息。

关于php - 如何在 Laravel 5 中有条件地要求身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30672303/

相关文章:

php - laravel 使用多个数据库,查询语法

php - 如何在 Amazon EC2 上上传 Web 应用程序?

php - swig 和 libcurl 在一起

ios - 如何设置 Firebase 安全规则以仅接受来自 iOS 应用程序的连接

java - 使用java从本地商店获取SSL证书到sslContext对象

php - 使用 Laravel with() 和 all()

php - 带有 Vuejs 的 Laravel 7.x Sanctum (SPA) 总是返回 401 Unauthorized

javascript - 使用帖子循环将 Wookmark tile 插件应用于 wordpress 主题

php - 有什么方法可以优化 MySQL 中的复杂数学查询吗?

java - 在 Java 中使用 SAML2 进行 SSO 身份验证以及如何使用 HtmlUnit 执行 JavaScript