Add fallback provider

This commit is contained in:
philipp lang 2021-11-23 19:15:39 +01:00
parent 1fb212b553
commit 26c81eb567
8 changed files with 141 additions and 14 deletions

View File

@ -3,10 +3,14 @@
namespace App; namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Contracts\Auth\MustVerifyEmail;
use Zoomyboy\LaravelNami\NamiUser as Authenticatable; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
class User extends Authenticatable class User extends Authenticatable
{ {
use HasFactory;
} }

View File

@ -1,5 +1,7 @@
<?php <?php
use App\User;
return [ return [
/* /*
@ -37,7 +39,8 @@ return [
'guards' => [ 'guards' => [
'web' => [ 'web' => [
'driver' => 'nami' 'driver' => 'nami',
'other_providers' => ['database'],
], ],
'api' => [ 'api' => [
@ -65,15 +68,10 @@ return [
*/ */
'providers' => [ 'providers' => [
'users' => [ 'database' => [
'driver' => 'nami', 'driver' => 'eloquent',
'model' => \App\User::class 'model' => User::class,
], ],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
], ],
/* /*

View File

@ -0,0 +1,27 @@
<?php
namespace Database\Factories;
use App\User;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends Factory<User>
*/
class UserFactory extends Factory
{
protected $model = User::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition()
{
return [
//
];
}
}

View File

@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('email');
$table->string('password');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}

@ -1 +1 @@
Subproject commit 6d6aa60363554c7f049ff91691302c7ef5c92d79 Subproject commit f30a1d19bf4296797521e6eeeda49853483b417b

View File

@ -11,7 +11,7 @@ use Tests\TestCase;
use Zoomyboy\LaravelNami\Authentication\NamiGuard; use Zoomyboy\LaravelNami\Authentication\NamiGuard;
use Zoomyboy\LaravelNami\Backend\FakeBackend; use Zoomyboy\LaravelNami\Backend\FakeBackend;
class LoginTest extends TestCase class NamiLoginTest extends TestCase
{ {
use RefreshDatabase; use RefreshDatabase;
@ -31,6 +31,7 @@ class LoginTest extends TestCase
$this->post('/login', [ $this->post('/login', [
'mglnr' => 123, 'mglnr' => 123,
'provider' => 'nami',
'password' => 'secret' 'password' => 'secret'
]); ]);
@ -54,11 +55,13 @@ class LoginTest extends TestCase
$this->post('/login', [ $this->post('/login', [
'mglnr' => 123, 'mglnr' => 123,
'provider' => 'nami',
'password' => 'secret' 'password' => 'secret'
]); ]);
auth()->logout(); auth()->logout();
$this->post('/login', [ $this->post('/login', [
'mglnr' => 123, 'mglnr' => 123,
'provider' => 'nami',
'password' => 'secret' 'password' => 'secret'
]); ]);
@ -77,11 +80,13 @@ class LoginTest extends TestCase
$this->post('/login', [ $this->post('/login', [
'mglnr' => 123, 'mglnr' => 123,
'provider' => 'nami',
'password' => 'secret' 'password' => 'secret'
]); ]);
app(NamiGuard::class)->setUser(null); app(NamiGuard::class)->setUser(null);
$this->post('/login', [ $this->post('/login', [
'mglnr' => 123, 'mglnr' => 123,
'provider' => 'nami',
'password' => 'secret' 'password' => 'secret'
]); ]);
@ -97,6 +102,7 @@ class LoginTest extends TestCase
$this->post('/login', [ $this->post('/login', [
'mglnr' => 123, 'mglnr' => 123,
'provider' => 'nami',
'password' => 'secret' 'password' => 'secret'
])->assertRedirect('/'); ])->assertRedirect('/');
@ -113,6 +119,7 @@ class LoginTest extends TestCase
$this->post('/login', [ $this->post('/login', [
'mglnr' => 123, 'mglnr' => 123,
'provider' => 'nami',
'password' => 'secret' 'password' => 'secret'
])->assertRedirect('/'); ])->assertRedirect('/');

View File

@ -0,0 +1,58 @@
<?php
namespace Tests\Feature;
use App\Setting\GeneralSettings;
use App\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Http;
use Tests\TestCase;
use Zoomyboy\LaravelNami\Authentication\NamiGuard;
use Zoomyboy\LaravelNami\Backend\FakeBackend;
class UserLoginTest extends TestCase
{
use RefreshDatabase;
public function setUp(): void
{
parent::setUp();
}
public function testItCanLoginWithUserAccount(): void
{
$this->init();
$this->withoutExceptionHandling();
$user = User::factory()->create(['email' => 'mail@example.com', 'password' => Hash::make('secret')]);
$this->post('/login', [
'email' => 'mail@example.com',
'provider' => 'database',
'password' => 'secret'
]);
$key = session()->get('auth_key');
$cache = Cache::get("namiauth-{$key}");
$this->assertEquals($user->id, data_get($cache, 'id'));
$this->assertTrue(auth()->check());
}
public function testItThrowsExceptionWhenLoginFailed(): void
{
$this->init();
$user = User::factory()->create(['email' => 'mail@example.com', 'password' => Hash::make('secret')]);
$this->post('/login', [
'email' => 'mail@example.com',
'provider' => 'database',
'password' => 'wrong'
])->assertRedirect('/');
$this->assertFalse(auth()->check());
}
}

View File

@ -26,7 +26,7 @@ abstract class TestCase extends BaseTestCase
app(FakeBackend::class) app(FakeBackend::class)
->fakeLogin('123') ->fakeLogin('123')
->addSearch(123, ['entries_vorname' => '::firstname::', 'entries_nachname' => '::lastname::', 'entries_gruppierungId' => 1000]); ->addSearch(123, ['entries_vorname' => '::firstname::', 'entries_nachname' => '::lastname::', 'entries_gruppierungId' => 1000]);
auth()->login([ auth()->loginNami([
'mglnr' => 123, 'mglnr' => 123,
'password' => 'secret', 'password' => 'secret',
]); ]);