entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

falla redireccionamiento al loguearse como usuario normal

este mi RedirectiAutenticate

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Auth\Guard;

class RedirectIfAuthenticated
{
    /**
     * The Guard implementation.
     *
     * @var Guard
     */
    protected $auth;

    /**
     * Create a new filter instance.
     *
     * @param  Guard  $auth
     * @return void
     */
    public function __construct(Guard $guest)
    {

        $this->auth = $guest;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($this->auth->check()) {
            return redirect('/home');
        }

        return $next($request);
    }
}

este es mi autenticate

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Auth\Guard;

class Authenticate
{
    /**
     * The Guard implementation.
     *
     * @var Guard
     */
    protected $auth;

    /**
     * Create a new filter instance.
     *
     * @param  Guard  $auth
     * @return void
     */
    public function __construct(Guard $auth)
    {
        $this->auth = $auth;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($this->auth->guest()) {
            if ($request->ajax()) {
                return response('Unauthorized.', 401);
            } else {
                return redirect()->to('auth/login');
            }
        }

        if($request->path() == 'order-detail') return $next($request);

        if(auth()->user()->type != 'admin'){
            $message = 'Permiso denegado: Solo los administradores pueden entrar a esta sección';
            return redirect()->route('home')->with('message', $message);
        }

        return $next($request);
    }
}

esta es la controlador de el redireccionamiento de la pagina principal
cuando le descomento el midllguert me direcciona solo usurios admin y no normales y me quita el login como pagina principal.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Product;

class StoreController extends Controller

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

    public function index()
    {
        $products = Product::all();
        //dd($products);
        return view('store.index', compact('products'));
    }

    public function show($slug)
    {
        $product = Product::where('slug', $slug)->first();
        //dd($product);

        return view('store.show', compact('product'));
    }
}

cuando me logeo como usuario normal no me muestra la pagina de inisio osea la home
espero y puedan ayudarme soy nuevo en laravel

route........----

<?php

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/

Route::bind('product', function($slug){
    return App\Product::where('slug', $slug)->first();
});

// Category dependency injection
Route::bind('category', function($category){
    return App\Category::find($category);
});

// User dependency injection
Route::bind('user', function($user){
    return App\User::find($user);
});

Route::get('/', [
    'as' => 'home',
    'uses' => '[email protected]'
]);
/*
Route::get('login', [
    'as' => 'logo',
    'uses' => '[email protected]'
]);
*/

Route::get('product/{slug}', [
    'as' => 'product-detail',
    'uses' => '[email protected]'
]);

// Carrito -------------

Route::get('cart/show', [
    'as' => 'cart-show',
    'uses' => '[email protected]'
]);

Route::get('cart/add/{product}', [
    'as' => 'cart-add',
    'uses' => '[email protected]'
]);

Route::get('cart/delete/{product}',[
    'as' => 'cart-delete',
    'uses' => '[email protected]'
]);

Route::get('cart/trash', [
    'as' => 'cart-trash',
    'uses' => '[email protected]'
]);

Route::get('cart/update/{product}/{quantity}', [
    'as' => 'cart-update',
    'uses' => '[email protected]'
]);

Route::get('order-detail', [
    'middleware' => 'auth:user',
    'as' => 'order-detail',
    'uses' => '[email protected]'
]);

// Authentication routes...
Route::get('auth/login', [
    'as' => 'login-get',
    'uses' => 'Auth\[email protected]'
]);

Route::post('auth/login', [
    'as' => 'login-post',
    'uses' => 'Auth\[email protected]'
]);

Route::get('auth/logout', [
    'as' => 'logout',
    'uses' => 'Auth\[email protected]'
]);

// Registration routes...
Route::get('auth/register', [
    'as' => 'register-get',
    'uses' => 'Auth\[email protected]'
]);

Route::post('auth/register', [
    'as' => 'register-post',
    'uses' => 'Auth\[email protected]'
]);

// Almacen..
Route::resource('almacen', 'AlmacenController');
Route::resource('productcreate', '[email protected]');
Route::post('altaproduc', [
        'as' => 'almacen.product.store',
        'uses' => '[email protected]'
    ]);

// Registra Empresa
Route::resource('empresa', 'EmpresaController');
Route::resource('empresacreate', '[email protected]');
Route::post('altaempresa', [
        'as' => 'empresa.store',
        'uses' => '[email protected]'
    ]);

// ***************************Categoria***********************************

Route::resource('categoria', '[email protected]');
Route::resource('crear/categoria', '[email protected]');
Route::resource('editar', '[email protected]');

//****************************perfil**************************************

Route::resource('perfil', 'PerfilController');
Route::resource('perfil/create', '[email protected]');
Route::post('altaperfil', [
        'as' => 'perfil.store',
        'uses' => '[email protected]'
    ]);

// Paypal

// Enviamos nuestro pedido a PayPal
Route::get('payment', array(
    'as' => 'payment',
    'uses' => '[email protected]',
));

// Después de realizar el pago Paypal redirecciona a esta ruta
Route::get('payment/status', array(
    'as' => 'payment.status',
    'uses' => '[email protected]',
));

// ADMIN -------------

Route::group(['namespace' => 'Admin', 'middleware' => ['auth'], 'prefix' => 'admin'], function()
{

    Route::get('home', function(){
        return view('admin.home');
    });

    Route::resource('category', 'CategoryController');

    Route::resource('product', 'ProductController');

    Route::resource('user', 'UserController');

    Route::get('orders', [
        'as' => 'admin.order.index',
        'uses' => '[email protected]'
    ]);

    Route::post('order/get-items', [
        'as' => 'admin.order.getItems',
        'uses' => '[email protected]'
    ]);

    Route::get('order/{id}', [
        'as' => 'admin.order.destroy',
        'uses' => '[email protected]'
    ]);

});

-1voto

white comentado

como tienes definidas tus rutas? podrías colocar el contenido de tu fichero Routes.php?

0voto

guatemala12 comentado

ese es mi route

1 Respuesta

2votos

white Puntos75840

En tu middleware RedirectIfAuthenticated tienes una condición, si un usuario esta logueado, se lo redirige a /home pero en tus routes.php no esta definida esa ruta.

reemplaza por:

public function handle($request, Closure $next)
{
    if ($this->auth->check()) {
        return redirect('/');
    }

    return $next($request);
}

En tu middleware Authenticate estas redirigiendo a todo usuario que no tenga su campo type como "admin" pero estas volviendo a redirigir a tu ruta home, es decir que nunca parara de redirigir, intenta retornar una vista

if (auth()->user()->type != 'admin') {
    $message = 'Permiso denegado: Solo los administradores pueden entrar a esta sección';
    return view('home')->with('message', $message);
}

estas seguro que la ruta home debe tener en su controlador StoreController el middleware auth?

cuentanos mejor cuales son tus intenciones, el usuario que no es admin puede acceder a '/' y no a '/admin'? el usuario que es admin puede entrar a '/admin/' y a '/' ?

0voto

guatemala12 comentado

si ese middlewera no va ahi era solo una prueba,
y lo que quiero es que los usuarios que no sean admin no puedan acceder a admin y el admin que pueda ver todo

0voto

white comentado

Tienes dos opciones, crear un middleware que compruebe si un usuario es admin, o editar el middleware Authenticate

editando Authenticate:

if (auth()->user()->type != 'admin' && $request->segment(1) === 'admin') {
    $message = 'Permiso denegado: Solo los administradores pueden entrar a esta sección';
    return view('home')->with('message', $message);
}

de esta forma si la url contiene '/admin' y si el usuario no es admin entonces se muestra la vista home con la variable message definida.


si te vas por crear un nuevo middleware, entonces remueve del middleware Authenticate esa condición. y edita tu ruta "admin".

creemos un nuevo middleware:

php artisan make:middleware CheckIfAdmin

Route::group([
    'namespace' => 'Admin',
    'middleware' => 'admin',
    'prefix' => 'admin'
], function() {
    // ...
});

en Kernel.php en el arreglo $routeMiddleware agregar:

'admin' => \App\Http\Middleware\CheckIfAdmin::class,

el fichero App\Middleware\CheckIfAdmin.php debe contener algo así:

<?php

namespace App\Http\Middleware;

use Closure;
use Auth;
use Illuminate\Contracts\Auth\Guard;

class CheckIfAdmin
{
    protected $auth;
    /**
     *
     */
    public function __construct(Guard $auth)
    {
        $this->auth = $auth;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($this->auth->guest() || Auth::user()->type != 'admin') {
            return view('home')->with('message', 'No tienes permisos para ver esta area');
        }

        return $next($request);
    }
}

0voto

guatemala12 comentado

listo muchas gracias.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta