2015-05-15 2 views
2

Я подключаю свое внешнее приложение, чтобы выполнить некоторые действия в Laravel 5, получить ответ и продолжить. Одна из таких действий является Войти usign Laravel код:Использование RedirecResponse за пределами Laravel

Вне Laravel

<?php 
use Laravel\Laravel; 

# Some code here but not headers or html output 
Laravel::login(); 

# Another some code more and then print login form from laravel blade template 
echo Laravel::loginView(); 

Laravel пользовательский класс соединение (за пределами Laravel)

<?php 
namespace Laravel; 

use App; 
use Illuminate; 

class Laravel 
{ 
    private static $app; 

    private static function load() 
    { 
     require_once self::getPath('bootstrap/autoload.php'); 

     self::$app = require_once self::getPath('bootstrap/app.php'); 

     self::$app->make('Illuminate\\Contracts\\Http\\Kernel')->handle(Illuminate\Http\Request::capture()); 
    } 

    public static function login() 
    { 
     self::load(); 

     $response = App::make('App\\Http\\Controllers\\User')->login($_POST); 

     if ($response instanceof RedirectResponse) { 
      # Here I want to stop my app, save cookies/headers from Laravel Login 
      # and redirect to $response target url location 
      # If I do it with a simple Location redirect, I lost cookies and headers 
      # and User will be not authenticated on next request 
      die($response); 
     } 
    } 

    public static function loginView() 
    { 
     self::load(); 

     return view('pages.users.login'); 
    } 
} 

Laravel App \ Http \ Контроллеры \ User @ Войти

class User 
{ 
    public function login($data) 
    { 
     $success = Auth::attempt([ 
      'user' => $data['user'], 
      'password' => $data['password'], 
     ], $data['remember']); 

     if ($success) { 
      return redirect()->to(url('/')); 
     } 
    } 
} 

У меня есть весь код для работы (просмотр шаблонов, проверка пользователей, вход в систему), но мне нужно, чтобы d перенаправить ответ на вход с заголовками и куки-файлами, которые будут доступны при следующем запросе.

Есть простой и чистый способ сделать это? (Есть больше кода, но упрощенный здесь)

спасибо :)

ответ

0

Существует простой и чистый способ сделать это, я пришел сюда в поисках, чтобы сделать то же самое и this page показал мне, что просто добавив звонок в ->send() по ответе отправит ответ. В вашем случае, метод login может выглядеть следующим образом:

public function login($data) 
{ 
    $success = Auth::attempt([ 
     'user' => $data['user'], 
     'password' => $data['password'], 
    ], $data['remember']); 

    if ($success) { 
     $response = redirect()->to(url('/')); 
     $response->send(); 
     return $response; 
    } 
} 

Если есть одно место в вашей интеграции, где вы вызываете ваши методы контроллера, было бы больше смысла, чтобы сделать вызов там так, что вы не Фактически вы вызываете ->send() из вашего контроллера (как это делает Laravel).

Смежные вопросы