Laravel 5.0 显示登录客人和注册用户

Posted

技术标签:

【中文标题】Laravel 5.0 显示登录客人和注册用户【英文标题】:Laravel 5.0 show logged in guests and registered users 【发布时间】:2015-10-06 11:52:23 【问题描述】:

我正在尝试向我的网站添加一个功能,该功能显示登录的客人和注册用户的数量(也显示注册用户的姓名,但我可以弄清楚那部分)。目前,我已经读到我需要更改 /config/Session.php 文件“驱动程序”以使用 database 而不是 file ('driver' => env('SESSION_DRIVER', 'database'),)。我发现一篇文章使用 Sentry 来完成此操作 (http://laravel.io/forum/03-03-2014-sentry-3-users-online),但是,我更愿意在不需要第三方文件的情况下执行此操作。尽管如此,我还是以他的信息为起点,现在使用模型进行会话。

至于问题,首先,即使在修改 Session.php、创建表并迁移它之后,我也无法真正让会话开始保存在我的数据库“会话”表中。它仍然保存在 /storage/framework/session/ 中的文件中(我仍然可以使用Session::all() 登录并显示会话信息)。

mysql> select * from sessions;
Empty set (0.00 sec)

第二个问题,如果他的文件中不存在会话,我不知道如何创建会话,则无法创建(如果有人只是打开站点并因此成为访客)也不会在用户注销时取消注册(删除他们的登录状态以及他们的 user_id,以便他们被视为访客)。

这是我当前的 OnlineUser.php 文件:

<?php namespace App;

use Illuminate\Database\Eloquent\Model;
// use Sentry;
use Session;
use Auth;

class OnlineUser extends Model 

    /**
     * @inheritDoc
     */
    public $table = 'sessions';

    /**
     * @inheritDoc
     */
    public $timestamps = false;

    /**
     * Returns all the guest users.
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeGuests($query)
    
        return $query->whereNull('user_id');
    

    /**
     * Returns all the registered users.
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeRegistered($query)
    
        return $query->whereNotNull('user_id')->with('user');
    

    /**
     * Updates the session of the current user.
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeUpdateCurrent($query)
    
        return $query->where('id', Session::getId())->update(array(
            'user_id' => !empty(Auth::user()) ? Auth::user()->id : null
        ));
    

    /**
     * Returns the user that belongs to this entry.
     *
     * @return \Cartalyst\Sentry\Users\EloquentUser
     */
    public function user()
    
        return $this->belongsTo('\App\User');
        //return $this->belongsTo('Cartalyst\Sentry\Users\EloquentUser'); # Sentry 3
        // return $this->belongsTo('Cartalyst\Sentry\Users\Eloquent\User'); # Sentry 2
    


如果有人有任何信息可以帮助我解决这些问题,我将不胜感激。如果您需要更多信息,请告诉我,我会尽快回复。

谢谢。

【问题讨论】:

【参考方案1】:

针对第一个问题,Laravel 仍然将会话保存在 /storage/framework/session/ 中

如果您按如下方式更新了 session.php 文件:

env('SESSION_DRIVER', '数据库')

确保您还更新了 .env 文件

SESSION_DRIVER=数据库

【讨论】:

抱歉回复晚了;从那以后,我一直在研究其他部分。这让数据库正常工作......现在我只需要弄清楚如何从会话中获取用户的 id 或将用户的 id 保存到它似乎不想做的会话表中。

以上是关于Laravel 5.0 显示登录客人和注册用户的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2:在用户登录/注销和注册后显示会话闪烁消息

Laravel:缓存和经过身份验证的用户

Laravel 自定义多重身份验证

Laravel 5.0 扩展了“注销”功能

Laravel实现用户的注册登录

Laravel 为外部用户登录成功设置会话或令牌 - 无用户仅数据库 Api 用户