laravel - 如何在中间件中使用 session 来始终检查用户是否登录

标签 laravel session authentication

我是 Laravel 的新手。我正在尝试检查用户是否已登录或访客。我创建一个名为(checkUserLogin)的中间件,我的代码是:

namespace App\Http\Middleware;
use Auth;
use Closure;
use App\Http\Controllers\Controller;
use session;
class checkUserLogin
{
    public function handle($request, Closure $next)
{
    if (session()->get('email') != ''){
        // redirected to dashboard.
    }else{
        // redirect to login page.
    }
    return $next($request);
   }
  }`

在我的 Controller 和 Blade 模板中session()->get('email')工作正常,如果我尝试打印 session()->get('email'),我会收到登录但在中间件中的用户的电子邮件然后出现空白屏幕。

最佳答案

使用提供给您的工具

阅读文档并了解 Retrieving The Authenticated User 。您将看到可以使用 $request->user()

检索已登录的用户

查看包含的中间件的代码 RedirectIfAuthenticated 。您将看到可以使用 Auth::guard($guard)->check() 检查用户是否登录

中间件代码示例

namespace App\Http\Middleware;

use Auth;
use Closure;

class checkUserLogin
{
    public function handle($request, Closure $next)
    {
        if ( $request->user() ){
            // user is logged in
        } else {
            // user is not logged in
        }

        return $next($request);
    }
}

一些想法

如果您的目标是让任何访问者都能看到路线,但要向已登录的访问者显示与您向访客显示的内容不同的部分,则可以在 Controller 中轻松完成此操作。例如,当用户未登录时,通常显示“登录”链接。当用户登录时,通常显示用户帐户菜单。

关于laravel - 如何在中间件中使用 session 来始终检查用户是否登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39585702/

相关文章:

ios - 使用 Xcode 8.3.3 和 Swift 3 从移动应用程序向服务器发送 NS 用户身份验证数据问题

c# - OneDrive 初始授权后自动登录

angularjs - 从本地存储中清除 token 就足够了吗?由于不活动而造成 session 超时的效果?

java - 如何使用java程序自动下载文件

Laravel Passport Vue 组件未发布在正确的路径中

php - laravel 5.5 中的 payhere 支付网关集成

php - 将 PHP session 和 cookie 视为缓存选项是否不好?

laravel - laravel 如何从 session 中获取用户 ID?

php - 确定 Laravel 5 中文件是否存在

reactjs - 带有水果蛋糕的 Laravel CORS