Я делаю тест, но он терпит неудачу, когда пытается проверить, вошел ли пользователь в систему:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Auth;
use App\User;
class RegisterTest extends TestCase
{
use RefreshDatabase;
/*.....
more test about registering
....*/
/** @test */
function redirect_to_home_page_and_logged_in_after_login()
{
$user = factory(User::class)->create([
'name' => 'Test',
'email' => '[email protected]',
'password' => '123456'
]);
$response = $this->post('login', [
'email' => '[email protected]',
'password' => '123456'
]);
//this works
$response->assertRedirect('/');
//this fails
$this->assertTrue(Auth::check());
}
}
А это мой контроллер HomeController:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class HomeController extends Controller
{
public function index()
{
if (Auth::check()){
return view('home');
}
return view('welcome');
}
}
А это мои маршруты / web.php
Route::get('/', 'HomeController@index');
Auth::routes();
Я не уверен, что делаю не так. Что я могу сделать?. Я использую laravel 5.7 и phpunit 5.7.1 Также в моем приложении / Htpp / Auth / LoginController.php я сделал это:
protected $redirectTo = '/';
Спасибо.
Я забыл о функции bcrypt (). Спасибо.






Создание пользователя требует, чтобы вы позаботились о хешировании пароля.
Вы можете просто сделать это с помощью функции php password_hash. И используйте Auth::login($user); для входа в систему.
Вот так:
$user = User::create(['email' => '[email protected]', 'password' => password_hash('123456', 1)]);
Auth::login($user); //You should be logged in :)
Это не решение того, о чем спрашивал автор ... правильное решение было дано Майком Харрисоном ...
В дополнение к хешированию вашего пароля вы также можете просто опубликовать его на маршруте регистрации и создать новую учетную запись.
/** @test */
function redirect_to_home_page_and_logged_in_after_register()
{
$response = $this->post('register', [
'name' => 'Test',
'email' => '[email protected]',
'password' => '123456'
]);
//this works
$response->assertRedirect('/');
//this fails
$this->assertTrue(Auth::check());
}
Я предполагаю, что вам также может потребоваться сделать это обоими способами:
/** @test */
function redirect_to_home_page_and_logged_in_after_login()
{
$user = factory(User::class)->create([
'name' => 'Test',
'email' => '[email protected]',
// note you need to use the bcrypt function here to hash your password
'password' => bcrypt('123456')
]);
$response = $this->post('login', [
'name' => 'Test',
'email' => '[email protected]',
'password' => '123456'
]);
//this works
$response->assertRedirect('/');
//this fails
$this->assertTrue(Auth::check());
}
Я сделаю безумное предположение и скажу, что вы на самом деле никогда не входили в систему, потому что вы не установили свой пароль на заводе. Однако я не совсем уверен. Можете ли вы попробовать?