如何在 Lumen 中使用身份验证进行用户登录?为啥我在启动时看到“未经授权”?
Posted
技术标签:
【中文标题】如何在 Lumen 中使用身份验证进行用户登录?为啥我在启动时看到“未经授权”?【英文标题】:How to use Authentication for user login in Lumen? Why do I see "Unauthorized" upon launch?如何在 Lumen 中使用身份验证进行用户登录?为什么我在启动时看到“未经授权”? 【发布时间】:2016-12-25 15:05:27 【问题描述】:我有一个无法加载/显示的登录页面(用户名/密码输入)。相反,在启动应用程序时,显示的只是“未经授权”。
这是来自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);
可能有更好的方法来完成我正在尝试做的事情,所以如果有,请向我展示那是什么。
但是为什么在我的应用加载时看到Unauthorized
?我该如何解决这个问题?
【问题讨论】:
【参考方案1】:看起来您在调用 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
A。其余代码看起来不错。
【讨论】:
我更新了你的代码。看起来我的 Auth 尝试有问题。这是我得到的错误:call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Auth\RequestGuard' does not have a method 'attempt'
以上是关于如何在 Lumen 中使用身份验证进行用户登录?为啥我在启动时看到“未经授权”?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用相同的身份验证保护验证多种类型的用户 [Lumen]