php - 如何在 Lumen 中使用身份验证进行用户登录?为什么我在启动时看到 "Unauthorized"?

标签 php laravel authentication middleware lumen

我有一个登录页面(用户名/密码输入)无法加载/显示。相反,启动应用程序时,仅显示“未经授权”。

这是来自 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';
        }
    }
}

这里的 Authenticate.php 位于“app\Http\Middleware”:

<?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);
    }
}

可能有更好的方法来完成我想做的事情,所以如果有的话,请向我演示那是什么。

但是为什么我在加载应用时会看到未经授权?我该如何解决这个问题?

最佳答案

看起来您正在检查用户是否在 AuthenticationController@login 之前经过身份验证可以调用方法。您需要从帖子/路由中删除中间件身份验证,因为本质上正在发生的事情是;

  • 主页 ( $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/dashboard答:其余代码看起来不错。

关于php - 如何在 Lumen 中使用身份验证进行用户登录?为什么我在启动时看到 "Unauthorized"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39022337/

相关文章:

java - 使用动态生成的内容时通过浏览器保存登录密码

c# - 使用自定义用户数据库的 Web API token 身份验证

javascript - php for循环Onclick函数每个函数事件

php - 如何处理SQLSTATE[23000] : Integrity constraint violation: 1062

php - 如何在一个选项卡或窗口中更新最新的 ID,同时在不同的选项卡或窗口中插入记录?

laravel - laravel 中的迁移中是否有必要为每个 up() 都写 down() ?

Laravel 5.5 - 更新没有过期时间的 Redis 缓存

php - MySQL - 如何每 24 小时递减一次 int 值?

php - MYSQL/Laravel : convert a WHERE into a variable

java - 未经授权收集Google表格信息