【发布时间】:2021-10-28 18:53:45
【问题描述】:
添加 auth:api 中间件后,我的路由突然停止调用它应该调用的函数。当我删除中间件时,它又开始工作了。
api.php 路由
Route::middleware('auth:api')->get('/addloancontroller', [\App\Http\Controllers\AddLoan::class, 'store'])
->name('addLoan');
AddLoan.php 控制器
<?php
namespace App\Http\Controllers;
use App\Models\EarningsRecord;
use App\Models\Lender;
use App\Models\LoanLenders;
use App\Models\Loans;
use App\Models\Login;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Auth;
use Illuminate\Support\Facades\DB;
class AddLoan extends Controller
{
public function store(Request $request) {
$request->validate([
'amount' => 'required',
'startDate' => 'required',
'endDate' => 'required',
'dateLoanSigned' => 'required',
'interestRate' => 'required',
'interestPaymentPeriod' => 'required',
'interest_only_period' => 'required',
'active' => 'required',
'loanType' => 'required',
'fName' => 'required',
'lName' => 'required',
'earnings' => 'required',
'irdNum' => 'required',
'bankAccNum' => 'required',
'address' => 'required',
'phone' => 'required',
]);
$company_id = $request->user();
dd($company_id);
$loan = Loans::create([
'companies_id' => $company_id,
'amount' => $request->amount,
'startDate' => $request->startDate,
'endDate' => $request->endDate,
'dateCreated' => $request->dateLoanSigned,
'interestRate' => $request->interestRate,
'interestPaymentPeriod' => $request->interestPaymentPeriod,
'interestOnlyPeriod' => $request->interestOnlyPeriod,
'active' => $request->active,
'refinanced' => 0,
'loanType' => $request->loanType
]);
$loan->save();
$lender = Lender::create([
'fName' => $request->fName,
'lName' => $request->lName,
'annualEarnings' => $request->earnings,
'irdNum' => $request->irdNum,
'bankAccNum' => $request-> bankAccNum,
'address' => $request-> address,
'phone' => $request->phone,
'loginID' => null
]);
$lender->save();
$taxAmount = DB::table('tax_rates')
->where('minAmount', '<', $request->earnings)
->where('maxAmount', '>', $request->earnings);
$loanLender = LoanLenders::create([
'loansID' => $loan->id,
'lenderID' => $lender->id,
'companyID' => $company_id,
'taxAmount' => $taxAmount->id
]);
$loanLender->save();
$earningsReport = EarningsRecord::create([
'lenderID' => $lender->id,
'annualEarnings' => $lender->annualEarnings,
'dateRecorded' => date('d-m-Y')
]);
$earningsReport->save();
return redirect(RouteServiceProvider::HOME);
}
}
路由被称为表单中的动作:
<form method="GET" action="{{ route('addLoan') }}">
我的所有验证都只是寻找“必需”的原因是因为我想确保它不是验证失败并且只是不产生错误。
提交表单后会发生什么?
当我提交表单并且路由附加了中间件时,它只是将我重定向回主屏幕。
缓存
我已经跑了:
php artisan cache:clearcomposer dump-autoload
身份验证令牌
正如 laravel 文档中所解释的,我已经将 api_token 列添加到用户的迁移文件中(在我的例子中,我使用登录模型进行身份验证)。下面是迁移文件中我添加该列的行:
$table->string('api_token', 80)->unique()->nullable()->default(null);
这是文档中的一行:
Schema::table('users', function ($table) {
$table->string('api_token', 80)->after('password')
->unique()
->nullable()
->default(null);
});
当我创建模型对象时,我通过这样做来制作经过身份验证的令牌:
'api_token' => Str::random(60)
当我检查数据库时,我看到 api_token 已成功添加,所以我不确定问题可能是什么。
(我使用的文档链接是here)
【问题讨论】:
-
您需要将令牌作为请求的一部分发送,因为它是用于确定您是否已通过身份验证的请求中的令牌。
-
另外,你为什么在 store 上使用 get 方法,应该是 post。
-
当我在测试时,我尝试了一切,看看它是否会改变任何东西,只是忘了把它改回帖子。还要感谢 cmets @Peppermintology,但我不确定如何在我的 addLoan 路线中做到这一点。
-
我尝试按照文档进行操作,但在您的路线中看不到任何有关执行此操作的信息,而是使用 request 执行此操作并将返回值分配为变量:laravel.com/docs/5.8/…
-
<form method="GET" action="{{ url('') }}/api/addloancontroller">你可以试试这个
标签: php laravel authentication laravel-middleware