Перенаправление на предыдущую страницу после входа в систему laravel5.7 - PullRequest
0 голосов
/ 04 апреля 2019

Я работаю над требованием, при котором я отправляю электронные письма после обновления / вставки записи, в которых я отправляю URL страницы в виде текста «нажмите здесь», когда пользователь нажимает на эту ссылку, он будет перенаправлен на эту страницу независимо от того, входит ли пользователь в систему илине.

Теперь, если пользователь уже вошел в систему, эта страница обычно открывается, но если пользователь не вошел в систему, то мне нужно перенаправить обратно на предыдущую страницу после входа в систему.

Моя проблемаздесь Я не могу перенаправить обратно на предыдущую страницу, к которой пользователь пытался получить доступ перед входом через ссылку «нажмите здесь» из электронной почты

Я искал решения, которые нашел несколько, но они не работали,Одним из решений, которое я попробовал, является ответ Скотта , но не работает почему, потому что аутентификация нашего приложения полностью настроена.Наш код файла RedirectIfAuthenticated ниже

ПРИМЕЧАНИЕ: Наше приложение было построено на Laravel

RedirectIfAuthenticated.php

class RedirectIfAuthenticated
{
  public function handle($request, Closure $next, $guard = null)
  {
    $path = $request->path();
    if (Auth::guard($guard)->check()) {
        if($path == 'app1')
        {
            return redirect('/app1/dashboard');
        }
        elseif($path == 'app2')
        {
            return redirect('/app2/dashboard');
        }
    }

    return $next($request);
  }
}

Любая помощь будет принята с благодарностью,Спасибо

Ответы [ 4 ]

0 голосов
/ 04 апреля 2019

Что вам нужно сделать, это получить предыдущий URL-адрес, проверить его и перенаправить на соответствующую панель, которую вы можете использовать URL::previous() в URL Фасадах.Вы можете сделать что-то вроде этого,

use Illuminate\Support\Facades\URL;

class RedirectIfAuthenticated
{
   public function handle($request, Closure $next, $guard = null)
   {
      $path1 = url('app1/login')
      $path2 = url('app2/login')

      if (Auth::guard($guard)->check()) {
        if($path1 == URL::previous())
        {
           return redirect('/app1/dashboard');
        }
        elseif($path2 == URL::previous())
        {
            return redirect('/app2/dashboard');
        }
    }

    return $next($request);
  } 
}

Надеюсь, это поможет.если вы просто хотите проверить app1 или app2 Я предлагаю вам explode() previous() и отметьте

0 голосов
/ 04 апреля 2019

Попробуйте это

переопределить этот метод в Auth\LoginController

protected function authenticated(Request $request, $user)
{
     if ($request->expectsJson() || $request->ajax()) {
        // return login success in json
     }
     return redirect()->intended($this->redirectPath());
}

Например.если вы пытаетесь получить доступ к /user/send/email и пользователь не вошел в систему, то после входа в систему он будет перенаправлен на страницу login, а затем автоматически перенаправится на /user/send/email page

RedirectIfAuthenticated

class RedirectIfAuthenticated
{
     public function handle($request, Closure $next, $guard = null)
     {
         $path = $request->path();
         if ( auth()->guard($guard)->check() ) {
            return redirect()->route($path.'.dashboard');
            // or
            // return redirect()->route($guard.'.dashboard'); //Suggest: define route based on guard
        }
        return $next($request);
     }

}

Зарегистрировать маршрут как app1.dashboard и app2.dashboard

0 голосов
/ 04 апреля 2019

Сохраните путь в переменной сеанса, если пользователь не вошел в систему. После успешного входа в систему проверьте, установлено ли значение сеанса, перенаправьте пользователя на установленное значение, и перед перенаправлением пользователя не забудьте сбросить сеанс

public function handle($request, Closure $next, $guard = null)
{
        $path = $request->path(); 
        $url = "";
        if($path == 'app1')
        {
           $url="/app1/dashboard";             
         }
        elseif($path == 'app2')
        {
           $url="/app2/dashboard";             
        }

        if (Auth::guard($guard)->check()) {
              return redirect($url);
        }
        else{
          // create session variable and store the path 
          // save `$url` to session variable
        }

      return $next($request);
 }
0 голосов
/ 04 апреля 2019

Я думаю, что вы должны перенаправить на заднюю страницу

class RedirectIfAuthenticated
{
  public function handle($request, Closure $next, $guard = null)
  {
    $path = $request->path();
    if (Auth::guard($guard)->check()) {
        return redirect()->back();
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...