我有一个Laravel5.4应用程序,在其中我必须通过外部API验证我的管理员用户,当成功登录时,它会返回一个包含用户信息的JSON。
我正在创建一个自定义保护,使此:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users'
],
'custom' => [
'driver' => 'session',
'provider' => 'customusers'
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
这是我的定制提供商:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'customusers' => [
'driver' => 'jsonresponse',
'model' => App\Admin::class,
]
],
在那之后,我不知道如何继续。我读过一些教程,比如George Buckingham的教程,我创建了一个自定义用户提供程序(现在我只需要它从EloquentUserProvider扩展,最终我将覆盖一些函数以连接到API)
<?php
namespace App\Providers;
use Illuminate\Auth\EloquentUserProvider;
use Illuminate\Support\Str;
class CustomUserProvider extends EloquentUserProvider {
}
然后在应用\提供商\AuthService提供商中注册
public function boot()
{
$this->registerPolicies();
Auth::provider('jsonresponse', function($app, array $config) {
return new CustomUserProvider($app['hash'], $config['model']);
});
}
在config/app中。php
'providers' => [
// Lots of other providers
// Own providers
App\Providers\CustomUserProvider::class,
],
但在那之后,我得到以下错误:
传递给Illumb\Auth\EloquentUserProvider::\uuu construct()的参数1必须是Illumb\Contracts\Hashing\Hasher的实例,给定的Illumb\Foundation\Application的实例,在/var/www/public/iberorides/vendor/laravel/framework/src/Illumb/Foundation/Application中调用。第612行的php,已定义
如果重写CustomUserProvider的构造函数并更改AuthServiceProvider中闭包中的参数,则会出现以下错误:
传递给Illumb\Foundation\Application::bootProvider()的参数1必须是Illumb\Support\ServiceProvider的实例,给定的App\Providers\IberouseProvider的实例,在/var/www/public/iberorides/vendor/laravel/framework/src/illumb/Foundation/Application中调用。第771行上的php,已定义
这让我觉得我做事的方式不对。
有人能给我指出正确的方向吗?
非常感谢你。
我找到的解决方案都不适合我,所以我想出了一个超级简单的方法。(Laravel 5.4)
我的问题是,我必须允许用户用他们的电话号码登录。
我覆盖了EloquentUserProvider:
class PhoneUserProvider extends EloquentUserProvider
{
public function retrieveByCredentials(array $credentials)
{
if (!$credentials) {
return null;
}
// Fallback to original email authorization
if (filter_var($credentials['email'], FILTER_VALIDATE_EMAIL)) {
return parent::retrieveByCredentials($credentials);
}
// Assume we are logging in with a phone number
return UserModel::where('phone', $credentials['email'])->first();
}
}
在我的引导方法中,我添加了以下几行:
Auth::setProvider(新的PhoneUserProvider(app(Hasher::class)、UserModel::class))
您甚至可以根据某些条件等在登录控制器中设置提供商。
EloquentUserProvider的非常小的定制可以通过AuthServiceProvider的引导方法中的以下代码来完成。
Auth::provider('eloquent', function($app, array $config)
{
return new class($app['hash'], $config['model']) extends \Illuminate\Auth\EloquentUserProvider
{
};
});
解决办法很简单。
首先,不管其他教程说了什么,您不必在您的配置提供程序(Laravel 5.4)中注册CustomUserProvider
。这是我得到的错误的原因。
我只需要从EloquentUserProvider
中重写两个方法,在其中根据所提供的凭据返回模型,并且
validateCreentials(用户合同$user,数组凭据)
在其中根据是否返回布尔值凭据是正确的。
您可以将同一个自定义提供程序类用于多个提供程序,而不仅仅是一个,例如。
'providers' => [
'customusers' => [
'driver' => 'jsonresponse',
'model' => App\User::class,
],
'customadmins' => [
'driver' => 'jsonresponse',
'model' => App\Admin::class,
],
],
之后,当您需要检查任何提供者的身份验证时,您需要将提供者提供为守卫,例如
Auth::守卫(“定制用户”)
。
我正在使用Symfony Security和系统中的自定义用户提供程序。它通过web服务为用户提供服务。 我根据本教程配置提供程序(http://symfony.com/doc/current/cookbook/security/custom_provider.html). 这里是检查用户的功能: 这很好,函数使用用户名调用一个web服务,然后返回一个包含用户数据的数组。但是现在我需要通过另一个w
我使用的是Spring Boot 2.0(利用Spring Security 5.0)。我正在尝试向WebSecurityConfigureAdapter子类中的AuthenticationManager添加自定义AuthenticationProvider。如果我重写configure(AuthenticationManagerBuilder)方法来提供我的新提供者,那么我不知道如何将Authe
我将为我的网站创建自定义用户提供程序,对于用户来说,没有“用户名”和“密码”这样的概念(实际上有类似于密码的东西,但它的名称不同)。在文档中,用户实体必须实现来自安全包的UserInterface,该安全包具有诸如getUsername、getPassword之类的方法。我能用我自己的领域吗?或者我应该使用名称冲突(例如,getUsername将返回我的唯一字段)来实现我的行为吗?
问题内容: 我正在尝试为我的应用程序创建一个帐户,在该帐户中我可以与我的帐户建立联系,例如facebook,viber,whatsapp等。我也希望我的帐户在设置的“帐户”部分中可见。有任何想法吗?我已经在Google上搜索了很多,但是找不到正确的答案从哪里开始。请帮忙。我试图创建一个帐户如下。这导致我出错。 问题答案: 您需要设置多个组件才能以编程方式创建一个帐户。你需要: AccountAut
是否有一个时间格式来指定这样的日期序列到轴在D3和v4?
问题内容: Sun的PKCS11 JCE安全提供程序缺少我们需要的某些功能。 因此,我使用原始资源编写了它的增强版本。 不幸的是,JCE基础结构拒绝新的提供者 “ JCE无法验证提供者”, 因为它没有正确签名。 抛出。 (呼叫) 关于如何签署新提供商以使其与JCE一起工作的任何建议? 问题答案: 该过程在文档“如何实现 提供者”中进行了描述。 它涉及到电子邮件 太阳向Oracle提供一些信息(包括