【发布时间】:2016-11-21 10:40:30
【问题描述】:
在 laravel 5 中,如果用户存在,我想将 www.example.com/username 响应路由到用户个人资料页面,就像 twitter、facebook 一样。当然我有 /blabla 这样的页面,但我不允许用户有 'blabla' 作为用户名。
在这种情况下,我尝试了很多东西,但最后一个是:中间件。 中间件对我来说是最好的,但在这种情况下,用户身份验证丢失了。如果我在控制器中使用类似 Auth::id() 的东西,我会得到错误。当我打印 dd(Auth::user()) 时,我只会得到 null。
顺便说一句,如果我切换到 www.example.com/ 或 www.example.com/blabla 等,则没有 Auth 问题。只有中间件会导致 Auth 问题。
我的中间件:
class UserMiddleware
{
public function handle($request, Closure $next)
{
if (User::where('username', $request->path())->exists()) {
$controller = App::make('App\Http\Controllers\UserController');
return Response::make($controller->callAction('index',array()));
//return $controller->callAction('index',array());
}
return $next($request);
}
}
内核.php:
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\UserMiddleware::class,
];
控制器:
public function index()
{
//$user=Auth::user()->id;
return view('front.user.profile',['user'=>Auth::user()]);
}
在视图中:
{{dd($user)}}
我怎样才能克服丢失 Auth 的问题,或者你告诉我如何用另一种方式解决它?
【问题讨论】:
标签: laravel-5.2 laravel-routing laravel-middleware