Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 跟踪laravel中注册用户和匿名用户提交的内容_Php_Mysql_Laravel_Authentication - Fatal编程技术网

Php 跟踪laravel中注册用户和匿名用户提交的内容

Php 跟踪laravel中注册用户和匿名用户提交的内容,php,mysql,laravel,authentication,Php,Mysql,Laravel,Authentication,我正在使用Laravel的预构建身份验证代码。我有另一张表,看起来像这样 Schema::create( 'submissions', function( Blueprint $table ) { $table->increments( 'id' ); $table->enum( 'complete', [ 'yes', 'no' ] ); $table->string( 'formName' ); $table->timestamps()

我正在使用Laravel的预构建身份验证代码。我有另一张表,看起来像这样

Schema::create( 'submissions', function( Blueprint $table ) {
    $table->increments( 'id' );
    $table->enum( 'complete', [ 'yes', 'no' ] );
    $table->string( 'formName' );
    $table->timestamps();

    // Reference to User ID but only when submitted by a registered user...
    //$table->integer( 'user_id' )->unsigned();
    //$table->foreign( 'user_id' )->references( 'id' )->on( 'users' );

    $table->integer( 'status_id' )->unsigned();
    $table->foreign( 'status_id' )->references( 'id' )->on( 'status' );
});
当提交是由注册用户提交时,我希望引用该用户id,但匿名提交是可能的,我需要一些指标,表明提交是由匿名用户提交的

我应该吗

  • 为非用户创建实际用户记录
  • 更改“我的用户id”外键以允许空值指示另一个用户
还是有更好的办法

编辑:扩展我的用例

我的应用程序基本上是一组表单(不是全部),供用户输入和更新信息。大多数表单将仅限于经过身份验证的用户。2-5份表格可供认证和非认证用户使用。如果表单提交是由经过身份验证的用户完成的,我想向管理员指出该用户是谁。如果用户没有经过身份验证,那么我只想向管理员表明这是一个匿名提交。因此,其他用户不需要任何逻辑,这只是一个标志,用于指示提交给管理员的hte的来源。也就是说,用户id上的nullable()键可能是一个不错的选择

展望未来,我将考虑添加跟踪功能,这样,如果提交的用户成为经过身份验证的用户,我可以回溯并更新他们的提交,以指示该用户


谢谢

这取决于系统的其他部分

例如,像phpBB和Shimmie这样的项目使用一个真正的Anon用户。但它们以某种方式将该用户标记为来宾帐户。我认为Shimmie在users表中使用了一个标志(即users.is_guest=1),只是将每个来宾验证为该用户以进行权限屏蔽。phpBB我相信会查找具有特定用户类型且在特定组中的用户(即users.user\u type=2&&users.groups.contains(1))。同样,phpBB将来宾身份验证为另一个用户

标记该用户(假设您只有一个非用户用户)的一种简单方法是强制将其PK设置为0或-1。它可以节省数据库中的空间,从本质上防止重复的“来宾”用户,并为您提供一种简单的方法来防止路由显示该用户(
->其中('id','[1-9][0-9]*')

另一种选择(没有真正的用户或组)意味着您的授权逻辑需要能够处理未经验证的用户。如果没有关于授权逻辑的更多信息,就很难给出建议

我通常更喜欢使用真正的用户或真正的组来传递给我的授权逻辑。它将使代码中的所有内容保持一致,并在UI中为站点管理员提供一个公共界面来更改来宾权限


这只需要做一点工作,以防止人们通过路由访问该用户,或出现在用户列表中等等。在您的模型上创建一个匿名帐户以过滤非用户用户(您的来宾帐户、任何bot帐户等)可能会有所帮助。

创建一个默认匿名使用可能会对您的系统造成其他不必要的后果。i、 电子邮件、个人资料页、链接、奖励、“积分”所有我们不知道的关于您的系统的信息,但这些信息可能会破坏您的系统或产生意外的副作用。将此答案标记为已接受,感谢您提供的信息。基于上述信息和我的用例。我只是在提交时将user_id字段设为空。