我有一个登录页面(用户名/密码输入(,它不加载/显示。相反,当启动该应用程序时,所有显示的都是"未经授权"。
这是来自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/dashboard
A。其余代码看起来很好。