#api #laravel-4 #basic-authentication
#API #laravel-4 #базовая аутентификация
Вопрос:
Я пытаюсь защитить свой RestAPI учетными данными и, читая о basic-auth laravel, я пытаюсь реализовать базовую систему аутентификации
Пользовательская таблица уже существует и заполнена данными
в filter.php Я установил
Маршрут::filter(‘auth.basic’, функция() { возвращает Auth::basic(); });
чем в маршруте api
// =============================================
// API ROUTES ==================================
// =============================================
Route::group(array('prefix' => 'api', 'before' => 'auth.basic'), function() {
Route::resource('products', 'ProductController', array('only' => array('index', 'store', 'destroy', 'update', 'show', 'edit')));
Route::get('products/{id}', 'ProductController@get', array('only' => array('show')));
});
контроллер довольно прост
<?php
use AppModelsProduct;
class ProductController extends BaseController {
private $model;
function __construct() {
$this->model = new Product();
}
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index() {
$model = new Product();
$page = Input::get('pageNumber');
$limit = Input::get('pageNumber');
$ram = Input::get('limit');
$cpu = Input::get('cpu');
$price_range = Input::get('price_range');
$keyword = Input::get('keyword');
return Response::json($model->getProducts($page));
}
/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store() {
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return Response
*/
public function destroy($id) {
}
public function get($id) {
$model = new Product();
return Response::json($model->getProduct($id));
}
public function show($id) {
return Response::json($this->model->getProduct($id));
}
public function update($id) {
return Response::json($this->model->getProduct($id));
}
public function pause($id) {
var_dump('pause');
}
public function create(){
}
public function edit(){
var_dump('test_edit');
}
}
вызываю domain.com/api/products
всплывающее окно входа в систему. не удается выполнить вход при заполнении полей и отправке данных
Как мне проверить учетные данные пользователей?
Для серверной части я использую Sentry, и это работает
filter.php
Route::filter('auth.admin', function() {
if (!Sentry::check()) {
return Redirect::route('admin.login');
}
});
Маршрут
Маршрут:: get(‘admin/login’, array(‘as’ => ‘admin.login’, ‘uses’ => ‘App Controllers Admin AuthController@getLogin’));
Контроллер
<?php namespace AppControllersAdmin;
use Auth, BaseController, Form, Input, Redirect, Sentry, View;
class AuthController extends BaseController {
/**
* Display the login page
* @return View
*/
public function getLogin()
{
return View::make('admin.auth.login');
}
/**
* Login action
* @return Redirect
*/
public function postLogin()
{
$credentials = array(
'email' => Input::get('email'),
'password' => Input::get('password')
);
try
{
$user = Sentry::authenticate($credentials, false);
if ($user)
{
return Redirect::route('admin.pages.index');
}
}
catch(Exception $e)
{
return Redirect::route('admin.login')->withErrors(array('login' => $e->getMessage()));
}
}
/**
* Logout action
* @return Redirect
*/
public function getLogout()
{
Sentry::logout();
return Redirect::route('admin.login');
}
}
Ответ №1:
Похоже, у вас не определена функция входа в систему.
кстати, вам следует изменить:
Route::group(array('prefix' => 'api', 'before' => 'auth.basic'), function() {
Route::resource('products', 'ProductController', array('only' => array('index', 'store', 'destroy', 'update', 'show', 'edit')));
Route::get('products/{id}', 'ProductController@get', array('only' => array('show')));
});
Для:
Route::group(array('prefix' => 'api', 'before' => 'auth.basic'), function(){
Route::get('products/{id}', 'ProductController@get'));
Route::resource('products', 'ProductController', array('except' => array('show')));
});
Комментарии:
1. Спасибо за исправление, система входа в систему уже существует, но код для бэкена отделен от интерфейса
2. ОК. Пожалуйста, обновите вопрос с функциями входа / выхода и маршрутами, а также с фильтром, если вы его изменили. Затем проверьте, отправлена ли форма входа по правильному URL с помощью проверки HTML-кода.