我刚刚使用 Laravel Passport 创建了一个简单的 OAuth 系统。该系统将负责外部应用程序的用户注册和身份验证。一切都如我所料,现在我想实现一种机制,在预定次数的登录尝试失败后锁定用户。
我是 Laravel 和 Passport 的新手,有没有内置的软件包可以帮我管理这个?还是我必须自己开发这个功能?如果是这样,我该如何完成这样的任务?
我一直在整个互联网上搜索,但直到现在我找不到任何关于 Passport OAuth 的信息。
最佳答案
我已经设法完成了我想做的事情,如果有人遇到这个问题,这就是我所做的...
创建自定义 AuthController 和登录方法来替换 Laravel Passport 的默认 oauth/token:
use Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory;
use Illuminate\Http\Response;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Response;
use \Laravel\Passport\Http\Controllers\AccessTokenController as AccessTokenController;
class AuthController extends AccessTokenController
{
use AuthenticatesUsers;
//custom login method
public function login(Request $request)
{
//...
}
}
在任何其他登录操作之前,检查用户是否已达到最大登录尝试次数:
//custom login method
public function login(Request $request)
{
//check if the max number of login attempts has been reached
if ($this->hasTooManyLoginAttempts($request))
{
$this->fireLockoutEvent($request);
return "To many attempts...";
}
//...
}
通过尝试登录来验证用户凭据。如果登录成功,则重置失败尝试计数。如果失败,增加计数:
//check if user has reached the max number of login attempts
//verify user credentials
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials))
{
//reset failed login attemps
$this->clearLoginAttempts($request);
//...
}
else
{
//count user failed login attempts
$this->incrementLoginAttempts($request);
return "Login failed...";
}
最后,由于 Passport (OAuth2) 使用 PSR-7 请求(服务器请求接口(interface)),我们需要将标准的 Laravel 请求转换为 PSR-7 以便颁发访问 token :
//Authentication passed...
//convert Laravel Request (Symfony Request) to PSR-7
$psr7Factory = new DiactorosFactory();
$psrRequest = $psr7Factory->createRequest($request);
//generate access token
$tokenResponse = parent::issueToken($psrRequest);
//return issued token
return Response::json($tokenResponse);
完整的登录方法如下:
public function login(Request $request)
{
//check if user has reached the max number of login attempts
if ($this->hasTooManyLoginAttempts($request))
{
$this->fireLockoutEvent($request);
return "To many attempts...";
}
//verify user credentials
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials))
{
//Authentication passed...
//reset failed login attemps
$this->clearLoginAttempts($request);
//convert Laravel Request (Symfony Request) to PSR-7
$psr7Factory = new DiactorosFactory();
$psrRequest = $psr7Factory->createRequest($request);
//generate access token
$tokenResponse = parent::issueToken($psrRequest);
//return issued token
return Response::json($tokenResponse);
}
else
{
//count user failed login attempts
$this->incrementLoginAttempts($request);
return "Login failed...";
}
}
关于php - Laravel 5.6 Passport OAuth 最大登录尝试次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49803119/
我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
我需要用任何语言编写一个算法,根据3个因素对数组进行排序。我以度假村为例(如Hipmunk)。假设我想去度假。我想要最便宜的地方、最好的评论和最多的景点。但是,显然我找不到在所有3个中都排名第一的方法。Example(assumingthereare20importantattractions):ResortA:$150/night...98/100infavorablereviews...18of20attractionsResortB:$99/night...85/100infavorablereviews...12of20attractionsResortC:$120/night
我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不
我正在尝试循环哈希数组。当我到达获取枚举器开始循环的位置时,出现以下错误:undefinedmethod`[]'fornil:NilClass我的代码如下所示:defextraireAttributs(attributsParam)classeTrouvee=falsescanTrouve=falseownerOSTrouve=falseownerAppTrouve=falseresultat=Hash.new(0)attributs=Array(attributsParam)attributs.eachdo|attribut|#CRASHESHERE!!!typeAttribut=a
我正在尝试用Ruby(Rails)编写一个正则表达式,以便用户名的字符仅包含数字和字母(也没有空格)。我有这个正则表达式,/^[a-zA-Z0-9]+$/,但它似乎没有用,我在Rails中收到一个错误,说“The如果正则表达式使用多行anchor(^或$),这可能会带来安全风险。您是要使用\A和\z,还是忘记添加:multiline=>true选项?"我的user.rb模型中此实现的完整代码是:classUser我做错了什么以及如何修复此正则表达式,使其仅对数字和字母有效而不对空格有效?谢谢。 最佳答案 简短回答:使用/\A[a-z
我有两个文本文件,master.txt和926.txt。如果926.txt中有一行不在master.txt中,我想写入一个新文件notinbook.txt。我写了我能想到的最好的东西,但考虑到我是一个糟糕的/新手程序员,它失败了。这是我的东西g=File.new("notinbook.txt","w")File.open("926.txt","r")do|f|while(line=f.gets)x=line.chompifFile.open("master.txt","w")do|h|endwhile(line=h.gets)ifline.chomp!=xputslineendende
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我尝试安装CMS时出现错误。它说Bundler::GemfileNotFound此外,当我运行bundle时,它还会显示Bundler::GemfileNotFound我该如何解决这个问题?
我使用“newapp_name”创建了一个新的Rails应用程序,我正在尝试编辑.gitignore文件,但在我的应用程序文件夹中找不到它。我在哪里可以找到它?我安装了Git。 最佳答案 .gitignore位于项目的root中,而不是app子目录中。首先打开终端并进入您的目录。您需要使用ls-a来显示stash文件。然后使用打开.gitignore 关于ruby-on-rails-尝试打开.gitignore以在文本编辑器中对其进行编辑,但在OSXMountainLion上找不到文件位
尝试从我的AngularJS端将数据发布到Rails服务器时出现问题。服务器错误:ActionController::RoutingError(Noroutematches[OPTIONS]"/users"):actionpack(4.1.9)lib/action_dispatch/middleware/debug_exceptions.rb:21:in`call'actionpack(4.1.9)lib/action_dispatch/middleware/show_exceptions.rb:30:in`call'railties(4.1.9)lib/rails/rack/logg