如何在 laravel 5.8 或 6 中制作通用自定义包进行身份验证。*

Posted

技术标签:

【中文标题】如何在 laravel 5.8 或 6 中制作通用自定义包进行身份验证。*【英文标题】:how to make common custom package for authentication in laravel 5.8 or 6.* 【发布时间】:2020-06-07 18:19:28 【问题描述】:

我必须在 laravel 中制作用于身份验证的自定义通用包,但有一个问题是,每当我使用 MongoDB 时,该包不起作用,而使用 mysql 时一切都很好。由于 laravel 模型,MySQL 使用 eloquent 模型,而 MongoDB 使用 jessengers 模型。那么有什么想法或技巧可以将单个模型用于不同的数据库吗?

使用 MySql 时

    use Illuminate\Foundation\Auth\User as Authenticatable;

    class User extends Authenticatable 
         protected $table = 'users';
    

在 MongoDB 中

    use Jenssegers\Mongodb\Auth\User as Authenticatable;

    class User extends Authenticatable 
          protected $collection = 'users';
    

并得到像

这样的错误

Symfony\Component\Debug\Exception\FatalThrowableError: 在文件 /var/www/test-authentication/vendor/laravel/framework/src/Illuminate/Database/Connection.php 中调用一个成员函数 prepare() /p>

【问题讨论】:

“不工作”错误?出乎意料的结果?你能显示代码吗?哪些 MongoDB/MySQL 版本已经过测试? 现在,我已经完全描述了,简而言之,我想在数据库在 MongoDB 或 MySQL 时使用单个模型 【参考方案1】:

你可以试试这个:

$user = (new \App\User(['name'=>'FirstName', 'email'=>'testemail@email.com']))->setConnection('x-DB');
$user->save();

// without models
(new \App\User(['name'=>'My Name', x-'email'=>'testmail@email.com']))>setConnection('x-DB')->save();

它作为create工作是一个实例化新静态的静态方法,所以它使用default connection。 看看这个,https://laravel.com/docs/5.7/authentication

【讨论】:

分享您的错误详情,也尝试使用 dd();调试。看看你会得到什么。 请检查,我已经编辑了我的问题。并添加了错误行 你注册MongoDB服务提供者了吗,注册MongodbServiceProvider。 'providers' => [ Jenssegers\Mongodb\MongodbServiceProvider::class, ]

以上是关于如何在 laravel 5.8 或 6 中制作通用自定义包进行身份验证。*的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 5.8 中的 htaccess 中重定向 [重复]

如何在 Laravel 5.8 中附加授权标头

从 Laravel 5.8 升级到 6.2 后 ConfirmPasswordController 不存在

如何在 laravel 5.8 中使用 mailchimp 发送简单邮件

Laravel 5.8 到 6.x 升级错误 - App\Exceptions\Handler::renderHttpException 声明

如何在 Laravel 5.8 中使用 Eloquent 进行查询?