перенаправить неавторизованных пользователей на другую страницу spatie laravel

Я работаю над spatie laravel. Я хочу перенаправить непроверенных пользователей на определенное представление в этом представлении, у него будет простая кнопка для перенаправления назад, я пробовал так, но это дает мне ошибку, например

Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)
Call to a member function setCookie() on null

это мой код в app/exception/handler.php

 public function render($request, Exception $exception)
{

     if ($exception instanceof \Spatie\Permission\Exceptions\UnauthorizedException) {
    // Code here ...
      return view('404');
}
    return parent::render($request, $exception);
}
 /**
 * Convert an authentication exception into an unauthenticated response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Illuminate\Auth\AuthenticationException  $exception
 * @return \Illuminate\Http\Response
 */
protected function unauthenticated($request, AuthenticationException $exception)
{
    if ($request->expectsJson()) {
        return response()->json(['error' => 'Unauthenticated.'], 401);
    }
    $guard = array_get($exception->guards(), 0);
    switch ($guard) {
      case 'admin':
        $login = 'admin.login';
        break;
      default:
        $login = 'login';
        break;
    }
    return redirect()->guest(route($login));
}

в 404.blade.php

 @extends('web.layouts.default')
@section('title', '404')
@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">You are not authorized</div>

                <div class="card-body">

                    <a href="{{ back() }}" class="btn btn-primary"> Click here to go back</a>
                 </div> <br>    <br>

        </div>
    </div>
</div>
@endsection

у меня есть разрешение на просмотр домашней страницы пользователю, когда это разрешение есть, вы можете просматривать страницу профиля в profileController, я написал как

 <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Auth;
use Spatie\Permission\Models\Permission;
class ProfileController extends Controller
{
     public function __construct()
    {
        //$this->middleware('auth',['except' => 'otp']);
       // return redirect(route('logout'));
         $this->middleware(['permission:view homepage','auth']);
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {

        //$per=Auth::user()->getAllPermissions();
        return view('profile');

    }
}

когда я набираю /profile для пользователя, у которого нет разрешения на просмотр домашней страницы, я получаю вышеупомянутую ошибку

пожалуйста, дайте мне знать любые входные данные, которые вы хотите от меня


person Pranav Mandlik    schedule 21.03.2018    source источник


Ответы (1)


Вы должны попробовать использовать кнопку ниже в файле 404.blade.php, и он работает нормально.

<a href="{{ redirect()->back()->getTargetUrl() }}" class="btn btn-primary"> Click here to go back</a>
person AddWeb Solution Pvt Ltd    schedule 21.03.2018
comment
да, это работает, но у меня есть только одна проблема: когда вы обновляете эту страницу, она не работает - person Pranav Mandlik; 21.03.2018
comment
да, это лучший способ определить любую страницу для перенаправления. Потому что, когда вы обновляете эту страницу, URL-адрес вашей предыдущей страницы меняется на вашу текущую страницу. - person AddWeb Solution Pvt Ltd; 21.03.2018
comment
@PranavMandlik: Рад помочь и спасибо, что приняли мой ответ. Не стесняйтесь голосовать за это как ответ, если наше решение касается вашей проблемы. - person AddWeb Solution Pvt Ltd; 21.03.2018
comment
да, конечно, прямо сейчас я исчерпал свой дневной лимит голосов, когда он будет пополнен, я проголосую за, спасибо - person Pranav Mandlik; 21.03.2018