0
我登錄到我的網站和我目前的頁面需要admin
中間件。我也從本頁獲得了api電話。這個API調用也通過相同的admin
中間件,並且在api.php
文件(laravel 5.3)中。我對網頁的請求有效。但是,我的api調用中間件返回302將我重定向到login
頁面。我與Auth::actingas($user)
這個API調用的測試用例也很好。中間件似乎並不認識到即使頁面沒有登錄。Laravel中間件返回405時使用ajax
我也已將api/*
添加到VerifyCSRF
的例外列表中。我怎樣才能解決這個問題?
這是我的routes/web.php
文件(我目前在頁面manageAdmins
:
Route::group(['prefix' => 'admin', 'middleware' => ['admin']], function(){
Route::get('/', '[email protected]');
Route::get('categories', '[email protected]');
Route::get('categories/add', '[email protected]');
Route::get('manageAdmins', '[email protected]');
});
我routes/api.php
文件:
<?php
use Illuminate\Http\Request;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware('auth:api');
Route::get('categories/{id}/children', '[email protected]');
Route::group(['prefix' => 'admin', 'middleware' => ['web', 'admin']], function() {
Route::put('makeNormalUserOfAdmin/{id}', '[email protected]');
});
這裏的API調用的管理中間件:
<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
class Admin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $guard=null)
{
if (!(Auth::guard($guard)->check())) {
return redirect('/login');
}
if(!(Auth::user()->is_admin)){
return redirect('/home');
}
return $next($request);
}
}
下面是失敗的api調用:
/**
* delete an admin from the database
*/
function deleteAdmin(id){
$.ajax({
method: "PUT",
url: "/api/admin/makeNormalUserOfAdmin/" + id,
error: function(data){
alert('error');
},
success: function(data){
$("table#admins tr#id" + id).fadeOut();
}
});
}
,並最後在這裏是通過測試案例:
<?php
use Illuminate\Foundation\Testing\DatabaseMigrations;
use App\User;
class MakeNormalUserOfAdminTest extends TestCase
{
use DatabaseMigrations;
/**
* Test the get categories method
*
*
*/
public function testMakeNormalUserOfAdmin()
{
$miscalaneousUsers = factory(App\User::class, 20)->create();
$user = factory(App\User::class)->create([
'is_admin' => true
]);
$this->actingAs($user)
->json("PUT", "api/admin/makeNormalUserOfAdmin/$user->id")
->assertResponseOk()
->assertResponseStatus(200);
$this->seeInDatabase('users', [
'id' => $user->id,
'name' => $user->name,
'password' => $user->password,
'remember_token' => $user->remember_token,
'updated_at' => $user->updated_at,
'created_at' => $user->created_at,
'is_admin' => 0
]);
$this->dontSeeInDatabase('users', [
'is_admin' => 1
]);
}
}
爲什麼下降投票?這個答案是合理的。 – Kyslik
不知道要公平:/ – Skysplit