Базовый Auth Laravel4, как его использовать?

#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-кода.