在用户表中使用 remember_token
来验证用户是否能够进入应用程序是安全的吗?
这个 token 的目的是什么?目前,我在表单中使用它来检查用户是否已登录 - 如果该 token 不存在,则显示登录屏幕。每次用户退出时,都会重新生成此 token。
在用户表中使用 remember_token
来验证用户是否能够进入应用程序是安全的吗?
这个 token 的目的是什么?目前,我在表单中使用它来检查用户是否已登录 - 如果该 token 不存在,则显示登录屏幕。每次用户退出时,都会重新生成此 token。
不,它不应该用于身份验证。它由框架用于防止“记住我”cookie劫持。该值在登录和注销时刷新。如果cookie被恶意人士劫持,注销会使劫持的cookie变得无用,因为它不再匹配。
请参考此文档:
为了使Auth::logout()
正常工作,我不得不在用户表迁移中添加remember_token
。
我已将remember_token
添加到我的迁移中,如下所示。
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
//
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->string('lname', 32);
$table->string('fname', 32);
$table->string('username', 32);
$table->string('email', 320);
$table->string('remember_token', 100);
$table->string('password', 64);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
Schema::drop('users');
}
}
你需要从命令行中删除用户表,然后进行迁移/填充。
$table->string('remember_token', 100);
。 - SnapShotpublic function save(array $options = array()) {
if(isset($this->remember_token))
unset($this->remember_token);
return parent::save($options);
}
在模型保存之前,这将删除“remember_token”列,从而防止因不存在的列而引发错误。
Laravel提供了一个CSRF令牌,它会自动添加到隐藏的输入框中,并在提交表单时进行验证,无论您是否已登录。如果您正在使用他们的表单构建器,则无需检查即可完成此操作。
您应该使用Auth
门面检查用户是否已登录并提交。
function get_guard(){
if(Auth::guard('web')->check()){
return "web";
}
elseif(Auth::guard('manager')->check()){
return "manager";
}
elseif(Auth::guard('client')->check()){
return "client";
}
return "web";
}
public function logout(){
$guard = $this->get_guard();
switch ($guard) {
case 'admin': Auth::guard('admin')->logout(); break;
case 'web' : Auth::guard('web')->logout(); break;
default : Auth::guard('web')->logout(); break;
}
return redirect()->guest(route("login"));
}