如何在Lumen中使用身份验证进行用户登录?为什么我看到";未经授权的";发射后


How to use Authentication for user login in Lumen? Why do I see "Unauthorized" upon launch?

我有一个登录页面(用户名/密码输入(,它不加载/显示。相反,当启动该应用程序时,所有显示的都是"未经授权"。

这是来自Authenticate.php中的一个命令,我在下面进一步介绍了它。

我的routes.php:

$app->get('/', 'PageController@index');
$app->group(['middleware' => 'middleware.auth'], function ($app) {
    $app->post('/', ['uses' => 'AuthenticationController@login']);
});

我的PageController.php

namespace App'Http'Controllers;
use App'User;
class PageController extends Controller
{
    public function __construct()
    {
        //
    }
    public function index() {
        return view('login');
    }
}

我的AuthenticationController.php:

namespace App'Http'Controllers;
use Illuminate'Http'Request;
use App'User;
use Auth;
class AuthenticationController extends Controller
{
    public function __construct()
    {
        //
    }
    public function login(Request $request) {
        $credentials = $request->only(['email','password']);
        if (Auth::attempt($credentials, $request->has('remember'))) {
            return'logged in';
        } else {
            return 'not logged in';
        }
    }
}

这是位于"app''Http''Middleware:"中的Authenticate.php

<?php
namespace App'Http'Middleware;
use Closure;
use Illuminate'Contracts'Auth'Factory as Auth;
class Authenticate
{
    /**
     * The authentication guard 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|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if ($this->auth->guard($guard)->guest()) {
            return response('Unauthorized.', 401);
        }
        return $next($request);
    }
}

也许有一个更好的方法来做我想做的事情,所以如果有,请向我展示这是什么。

但为什么我的应用程序加载时会看到Unauthorized?我该怎么解决这个问题?

在调用AuthenticationController@login方法之前,您似乎正在检查用户是否已通过身份验证。您需要从post/route中删除中间件auth,因为本质上正在发生的是;

  • 主页($app->get('/'...(打开良好,因为没有为此路由定义身份验证中间件
  • 当你发布登录表单时,Lumen被告知只有经过身份验证的用户才能访问该页面,因为根据你的POST /路由定义了middleware.auth

这应该起作用:routes.php

$app->get('/', 'PageController@index');
$app->post('/', ['uses' => 'AuthenticationController@login']);

$app->group(['middleware' => 'middleware.auth'], function ($app) {
    $app->get('/user/dashboard', ['uses' => 'Controller@method']);
});

这样,任何人都可以查看并提交您的登录页面,但只有登录的用户才能访问URL /user/dashboardA。其余代码看起来很好。