如何更改Laravel 5.2身份验证的默认行为

时间:2016-05-12 01:24:54

标签: laravel authentication laravel-5.2 artisan

在Laravel 5.2“身份验证快速入门”的文档中:

“Laravel提供了一种快速方法,可以使用一个简单的命令来支持您进行身份验证所需的所有路由和视图”。

php artisan make:auth

运行该命令后,默认行为将创建许多关于模型,控制器,视图,数据库表等的文件......

我发现创建了一个“用户”表,其中包含“id name email password”列,非常棒!

但是,如果我的网络应用程序有关于“用户”的不同结构,例如我不使用唯一的“email”属性来识别。

如何更改命令php artisan make:auth的行为?

谢谢!

2 个答案:

答案 0 :(得分:1)

users表迁移甚至在您执行php artisan make:auth之前就已存在。因此,要从电子邮件列中删除unique密钥,您只需转到位于此处的迁移文件:

database/migrations/create_users_table

要从电子邮件列中删除unique密钥,只需将其从代码中删除

即可
$table->string('email');

所以看起来应该是这样的:

Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email');
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
});

答案 1 :(得分:1)

更新您的迁移,如@Taylor Swift所说。

如你所说。您的用户表中没有“电子邮件”。

将您的用户迁移更新为以下内容,

Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
});

默认情况下,AuthController使用电子邮件识别用户

laravel AuthController开箱即用,允许用户使用电子邮件,密码登录。

因为您不需要电子邮件。 (假设您使用id作为每个用户的唯一值)。您需要告诉AuthController按ID而不是电子邮件查找用户。

打开你的

中的AuthController
  

应用\ HTTP \控制器\验证\ AuthController

并添加以下行

protected $username = 'id';

您的Auth控制器看起来像

class AuthController extends Controller
{

    use AuthenticatesAndRegistersUsers, ThrottlesLogins;


    protected $username = 'id';


    public function __construct()
    {
        $this->middleware($this->guestMiddleware(), ['except' => 'logout']);
    }

}