更新#1
所以我想我找到了问题的所在,但由于我缺乏知识,我没有办法解决这个问题。
在使用Sentry时,我尝试扩展Sentry包默认的“Model”和Laravel在Illuminate\Database\Eloquent\Model下的“雄辩”。两样都没用。但是当使用Laravel本身的雄辩(没有Sentry软件包插件)的时候,斯塔普勒工作得很好。
因此,我想尽管它使用了雄辩的功能(它的额外功能可能与订书机的特性或构造函数相冲突,我不知道),但Stapler和Sentry的用户模型之间还是存在一些兼容性问题。太糟糕了,因为Sentry是管理身份验证和节流的一个很好的包,据我所知,它被广泛使用。
有什么简单的方法可以用哨兵使用订书机的不可知版本,还是我需要重写所有代码才能使用laravel的auth?
主要问题
我正在开发一个应用程序,它使用Cartalyst的Sentry来管理用户。然而,我希望用户和其他型号能够有相关的化身,所以我也使用Codesleeve的Stapler。
我已经阅读了拉拉订书机的自述文件和订书机的大多数独立版本文档,但我不知道如何让它们与Sentry一起工作。
$user = Sentry::createUser(array(
'username' => Input::get('username'),
'email' => Input::get('email'),
'password' => Input::get('password'),
'activated' => false,
'avatar' => Input::file('avatar')
));
return 'success';我得到:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'avatar' in 'field list' 因此,Sentry似乎在查询,仿佛化身是一条字符串,而Stapler则不起作用。
下面是我的Sentry用户模型(我在Laravel中进行了扩展):
use Illuminate\Database\Eloquent\SoftDeletingTrait;
use Illuminate\Database\Eloquent\Model;
use Codesleeve\Stapler\ORM\StaplerableInterface;
use Codesleeve\Stapler\ORM\EloquentTrait;
use Cartalyst\Sentry\Groups\GroupInterface;
use Cartalyst\Sentry\Hashing\HasherInterface;
use Cartalyst\Sentry\Users\LoginRequiredException;
use Cartalyst\Sentry\Users\PasswordRequiredException;
use Cartalyst\Sentry\Users\UserAlreadyActivatedException;
use Cartalyst\Sentry\Users\UserExistsException;
use Cartalyst\Sentry\Users\UserInterface;
class User extends Model implements UserInterface, StaplerableInterface {
use SoftDeletingTrait, EloquentTrait;
protected $fillabe = array('username','email','password','password_temp','code','active','avatar');
public function __construct(array $attributes = array()) {
$this->hasAttachedFile('avatar', [
'styles' => [
'medium' => '300x300',
'thumb' => '100x100'
]
]);
parent::__construct($attributes);
}
protected $dates = ['deleted_at'];在Sentry的配置中:
'model' => 'Cartalyst\Sentry\Users\Eloquent\User',这可能是简单的解决,因为我是非常新的拉里威尔,史泰特和史塔普勒,但我找不到任何信息,这将使我解决问题。
提前感谢!
发布于 2015-09-25 13:42:00
是的,是可以做到的。基于OP中的内容,根本原因似乎是您的用户模型不知道avatar是一个由Stapler提供的列。
理论: Sentry用户提供者制造一个用户模型,就在这里。根据订书机文档,该用户模型必须是可识别的.幸运的是,Sentry是可配置的,您可以告诉它在setModel()中使用您的自定义模型。
解决方案的大致轮廓:首先,您需要一个可以感知到的模型。你可能已经有这个了。请注意,它扩展了Sentry提供的模型类,并导入了Stapler特性。两者都很重要。
<?php // app/models/UserModel.php
namespace App\Model;
use Codesleeve\Stapler\ORM\StaplerableInterface;
use Codesleeve\Stapler\ORM\EloquentTrait;
use Cartalyst\Sentry\Users\Eloquent\User as SentryUserModel;
class UserModel extends SentryUserModel implements StaplerableInterface {
use EloquentTrait;
}其次,您需要指示Sentry使用此方法。下面我使用运行时配置更改,这是我的首选。但是你也可以更改Sentry配置文件
<?php // app/bootstrap.php
\Sentry::getUserProvider()->setModel('App\Model\UserModel');我在Laravel 4的记忆中做了这件事,所以可能需要做一些调整。
https://stackoverflow.com/questions/29380225
复制相似问题