Laravel护照/允许来宾的api路线/绕过Laravel api中间件

问题描述

这是我经过一周的努力发现的唯一一种用于护照认证解决方案。享受吧!

文件app / Http / Middleware / Authenticate.PHP中粘贴以下代码

<?PHP

namespace App\Http\Middleware;

use Closure;
use Illuminate\Auth\Middleware\Authenticate as Middleware;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Contracts\Auth\Factory as Auth;

class Authenticate extends Middleware
{
    /**
     * The authentication factory instance.
     *
     * @var \Illuminate\Contracts\Auth\Factory
     */
    protected $auth;

    /**
     * Create a new middleware instance.
     *
     * @param  \Illuminate\Contracts\Auth\Factory  $auth
     * @return void
     */
    public function __construct(Auth $auth)
    {
        $this->auth = $auth;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string[]  ...$guards
     * @return mixed
     *
     * @throws \Illuminate\Auth\AuthenticationException
     */
    public function handle($request,Closure $next,...$guards)
    {
        $this->authenticate($guards);

        return $next($request);
    }

    /**
     * Determine if the user is logged in to any of the given guards.
     *
     * @param  array  $guards
     * @return void
     *
     * @throws \Illuminate\Auth\AuthenticationException
     */
    protected function authenticate(array $guards)
    {

        if (empty($guards)) {
            return $this->auth->authenticate();
        }

        foreach ($guards as $guard) {
            if ($this->auth->guard($guard)->check()) {
                return $this->auth->shouldUse($guard);
            }else{
                return null;
            }
        }

        throw new AuthenticationException('Unauthenticated.',$guards);
    }
}

此后,所有路线将对客人开放。

创建新的中间件DenyIfNotAuthenticated。从认的app / Http / Middleware / Authenticate.PHP添加代码。会是这样的:

<?PHP

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;

class DenyIfNotAuthenticated extends Middleware
{
    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return route('login');
        }
    }
}

添加到Kernel.PHP文件行:'auth.deny'=> \ App \ Http \ Middleware \ DenyIfNotAuthenticated :: class,下面的'auth'=> \ App \ Http \ Middleware \ Authenticate :: class,>

routes / api.PHP中的路由如下:

Route::apiResource('recipes','RecipesController'); // accessible for guests

Route::group(['middleware' => ['auth.deny:api']],function () {
    Route::get('ingredients','IngredientsController@index');
}); // accessible only for authorized users

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)