[英]Laravel - Password protect a Route
我有一个没有用户角色的应用程序,因为除了 1 之外的所有功能都对所有用户开放。
由于我们添加了一个需要付费的短信通知功能,我想限制谁可以在密码后面使用此功能。
所以目前在我的表格中,我有以下内容:
<div class="row">
<div class="col-sm-8">
<div class="card">
<h2 class="text-center">Send SMS Notification</h2>
<p class="text-center">Please note a password is required for this function</p>
<div class="card-header card-header-rose card-header-text">
<div class="card-text">
<h4 class="card-title">Enter Message</h4>
</div>
</div>
{!! Form::open(array('action' => ['NotificationController@sms'],'method'=>'POST', 'class'=>'form-horizontal')) !!}
<div class = "card-body">
@if (count($errors)>0)
<div class = "alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class = "row">
<label class = "col-sm-2 col-form-label">Message: </label>
<div class = "col-sm-6">
<div class = "form-group">
<input type = "text" class = "form-control" maxlength="160" name="message">
</div>
</div>
</div>
</div>
<div class = "card-footer">
<div class = "row">
<div class = "col-md-4">
<div class="pull-left">
<a href="{{action('HomeController@index')}}" class = "btn btn-danger">Cancel</a>
</div>
</div>
<div class ="col-md-4">
<button type="submit" class="btn btn-success">Send SMS Notification</button>
</div>
</div>
</div>
{!!Form::close()!!}
</div>
</div>
</div>
所以这个想法是当按下发送短信通知时,系统会要求用户输入密码。
我不知道如何添加这个功能,谷歌也没有帮助。 目前,发送消息的代码很好,在这里没有遇到任何问题。
欢迎提出其他建议。
谢谢
我认为您正在寻找Laravel Basic Auth 。 Basic Auth 自带 Laravel auot 的盒子。
您需要一个包含他们的电子邮件和密码的用户表。 您可以使用该中间件保护路由,该中间件只接受身份验证用户以获取下一个请求。
在您的情况下,如果您想限制用户访问短信发送功能,您将不得不在您的用户模型中添加某种差异化,例如您控制哪些用户可以或不能发送短信的策略。
Http基本身份验证期望在基本身份验证表单中找到一个电子邮件作为用户名。
你唯一需要做的就是
Route::get('/sendsms', [SmsController::class,'index'])->middleware('auth.basic');
Laravel Doc中有关此的更多信息
除了中间件,您还可以在控制器中进行简单的检查(假设您存储了密码,因为它应该被存储),只需在发送短信表单中添加密码字段
$validated = request()->validate([
'password' => 'required',
// other rules here
]);
// take it from users table or where you're going to store passwords
$hashedOriginal = Hash::make('smspassword');
$isPasswordValid = Hash::check($validated['password'], $hashedOriginal);
if (!$isPasswordValid) {
abort('401');
}
// your send sms code next
一般来说,中间件可以让你很容易地扩展密码保护的功能,所以如果有可能发送短信不是最后一个密码保护的功能,你最好坚持使用中间件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.