首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 5.1无密码身份验证

Laravel 5.1无密码身份验证
EN

Stack Overflow用户
提问于 2015-09-04 14:48:26
回答 3查看 2.1K关注 0票数 2

我正在用Laravel5.1开发一个应用程序。我需要能够登录用户只有电子邮件(不使用密码)。由于其他原因,我在登录表单中有一个密码字段,但唯一需要检查的是用户电子邮件存在于我的user表中。我重新编写了AuthController,并且尝试使用try ()方法,但是当我尝试使用有效的电子邮件登录时,它会给出以下错误:

ErrorException在EloquentUserProvider.php第112行:未定义索引:密码

我如何告诉EloquentUserProvider,我没有使用密码登录,只使用用户名(电子邮件)?

谢谢你!!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-14 18:50:28

我最后做的是写我自己的Auth控制器。我还编写了自己的中间件。我之所以这样做,是因为当用户登录时,我需要做更多的操作。我想其他的答案是可以的,但是由于我在用户登录时需要其他功能,所以我决定编写自己的控制器来实现我需要的函数。在我的Auth控制器里我写了我自己的登录函数,我自己的注销等等.非常感谢你的回答!

票数 1
EN

Stack Overflow用户

发布于 2015-09-05 12:26:02

您可以找到带有查询的电子邮件,并具有用户id,然后

代码语言:javascript
复制
Auth::loginUsingId(user_id);

它将对user_id进行身份验证。

票数 5
EN

Stack Overflow用户

发布于 2015-09-04 16:11:40

如果您没有使用密码,那么真正需要做的就是:

代码语言:javascript
复制
$authorised = User::where('email', $email)->exists();

但是,如果您想创建自己的无密码UserProvider,可以扩展EloquentUserProvider并覆盖validateCredentials以不检查密码,如下所示:

代码语言:javascript
复制
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;
}

}

您可能还需要为其创建新的服务提供商:

代码语言:javascript
复制
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.
}
}

显然,这段代码还没有经过充分的测试,但这应该会或多或少地起作用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32400923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档