2015-10-05 4 views
0

i написать контроллер для управления ajax-запросами. я пишу метод построения для проверки входа пользователя или нет if блок работает нормально, но всегда возвращает user.setting просмотр и возврат в конструкцию не работают.Laravel auth via ajax

контроллер:

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Http\Requests; 
use App\Http\Controllers\Controller; 
use Auth; 

class AjaxController extends Controller { 

    public function __construct() { 
     if (Auth::check() == FALSE) { 
      return view('errors.notLogin'); 
     } 
    } 

    public function settings() { 
     return view('user.setting'); 
    } 

} 

маршрут:

Route::post('ajax/settings', '[email protected]'); 

ЯШ:

acc_settings = function (url) { 
    $.ajaxSetup({ 
     headers: { 
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
     } 
    }); 
    $.ajax({ 
     url: url, 
     type: 'POST', 
     data: 'settings=settings', 
     success: function (data) { 
      $("#ajax").html(data); 
     } 
    }); 
}; 

ответ

2

Это похоже на работу для Middleware.

Laravel Docs on Middleware

Вы не должны ничего делать в конструкторе AjaxController, вместо этого вы должны зарегистрировать промежуточное программное обеспечение для маршрута, который вы хотите защитить:

Route::post('ajax/settings', [ 
    'uses' => '[email protected]', 
    'middleware' => 'auth' 
]); 

Так как вы, вероятно, потребуется много функции Ajax, вы могли бы вместо того, чтобы сгруппировать их все с тем же промежуточным слоем, а также префиксом «Аякс» в то время как вы на него:

Route::group(['prefix' => 'ajax', 'middleware' => 'auth'], function() { 
    Route::post('settings', '[email protected]'); 
    //Define more routes here... 
}); 

«auth» является одним из предустановленных промежуточных программ, поставляемых с Laravel, вы можете найти его в App \ Http \ Middleware \ Authenticate и изменить его по мере необходимости или зарегистрировать свое собственное промежуточное ПО Ajax. В любом случае, ваша функция ручка будет выглядеть следующим образом:

public function handle($request, Closure $next) 
{ 
    if ($this->auth->guest()) { 
     return view('errors.notLogin'); 
    } 

    return $next($request); 
} 
3

Вы должны использовать middleware вместо повторной реализации функциональности.

public function __construct() 
{ 
    $this->middleware('auth'); 
} 

затем внутри auth можно добавить оба случая для АЯКС & регулярного запроса HTTP -

public function handle($request, Closure $next) 
{ 

    if ($this->auth->guest()) 
    { 
     if ($request->ajax()) 
     { 
      return view('errors.notLogin'); 
     } 
     else 
     { 
      return redirect()->guest('auth/login'); 
     } 
    } 

    return $next($request); 
} 
0

Почему бы вам не использовать Middleware?

Ваш конструктор должен быть:

public function __construct() { 
    $this->middleware('auth'); 
} 

Вы также можете назначить промежуточное программное обеспечение для работы на маршруте в routes.php:

Route::group(['middleware' => 'auth'], function() { 
    Route::post('ajax/settings', '[email protected]'); 
}