0
votes

I try to protect my restAPI with credentials and reading about basic-auth laravel I try to implement a basic authentication sytem

User tabel already exists and populated with data

in filter.php I set

Route::filter('auth.basic', function() { return Auth::basic(); });

than in api Route

// =============================================
// 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')));
        });

the controller is quite simple

<?php

use App\Models\Product;

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');
    }

}

calling domain.com/api/products pop up login window. populating fields and submit datas can't log in

How do I check Users credentials?

For backend I use Sentry and it's working

filter.php

Route::filter('auth.admin', function() {
    if (!Sentry::check()) {
        return Redirect::route('admin.login');
    }
});

Route

Route::get('admin/login', array('as' => 'admin.login', 'uses' => 'App\Controllers\Admin\AuthController@getLogin'));

Controller

<?php namespace App\Controllers\Admin;

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

1 Answers

0
votes

It seems that you don't have a login function defined.

by the way, you should change:

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')));
        });

to:

Route::group(array('prefix' => 'api', 'before' => 'auth.basic'), function(){

    Route::get('products/{id}', 'ProductController@get'));
    Route::resource('products', 'ProductController', array('except' => array('show')));
});