我正在用Laravel5.1开发一个应用程序。我需要能够登录用户只有电子邮件(不使用密码)。由于其他原因,我在登录表单中有一个密码字段,但唯一需要检查的是用户电子邮件存在于我的user表中。我重新编写了AuthController,并且尝试使用try ()方法,但是当我尝试使用有效的电子邮件登录时,它会给出以下错误:
ErrorException在EloquentUserProvider.php第112行:未定义索引:密码
我如何告诉EloquentUserProvider,我没有使用密码登录,只使用用户名(电子邮件)?
谢谢你!!
发布于 2015-09-14 18:50:28
我最后做的是写我自己的Auth控制器。我还编写了自己的中间件。我之所以这样做,是因为当用户登录时,我需要做更多的操作。我想其他的答案是可以的,但是由于我在用户登录时需要其他功能,所以我决定编写自己的控制器来实现我需要的函数。在我的Auth控制器里我写了我自己的登录函数,我自己的注销等等.非常感谢你的回答!
发布于 2015-09-05 12:26:02
您可以找到带有查询的电子邮件,并具有用户id,然后
Auth::loginUsingId(user_id);它将对user_id进行身份验证。
发布于 2015-09-04 16:11:40
如果您没有使用密码,那么真正需要做的就是:
$authorised = User::where('email', $email)->exists();但是,如果您想创建自己的无密码UserProvider,可以扩展EloquentUserProvider并覆盖validateCredentials以不检查密码,如下所示:
use Illuminate\Contracts\Auth\Authenticatable as UserContract;
use Illuminate\Contracts\Hashing\Hasher as HasherContract;
use Illuminate\Auth\EloquentUserProvider;
class NoPasswordUserProvider extends EloquentUserProvider {
public function __construct(HasherContract $hasher, $model)
{
parent::__construct($hasher, $model);
}
/**
* Validate a user against the given credentials.
*
* @param \Illuminate\Contracts\Auth\Authenticatable $user
* @param array $credentials
* @return bool
*/
public function validateCredentials(UserContract $user, array $credentials)
{
return true;
}
}您可能还需要为其创建新的服务提供商:
class NoPasswordUserServiceProvider extends ServiceProvider {
public function boot()
{
Auth::extend('NoPasswordAuth', function($app)
{
$model = $this->app['config']['auth.model'];
return new NoPasswordUserProvider($this->app['hash'], $model);
});
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
// TODO: Implement register() method.
}
}显然,这段代码还没有经过充分的测试,但这应该会或多或少地起作用。
https://stackoverflow.com/questions/32400923
复制相似问题