• 13-07-2024, 03:33:27
    #1
    Merhaba;

    Dusk ile uzak siteye login olmak ile alakalı bir test yazıyorum.
    Burda 2fa doğrulaması var, login aşamasında.

    Bunu geçtikten somra, tarayıcıyı / cihazı kaydet diyip bir sonraki login işleminde 2fa doğrulaması sormamasını sağlamanın yolunun cookie setlemek olduğunu okudum.
    Cookie'ler setleniyor ancak;

    cookie domain hatası alıyorum.

    Tecrübesi olanlar yol gösterebilir mi ?
    Teşekkürler.

    Soru aynı zamanda stackoverflow 'da da mevcut.
    https://stackoverflow.com/questions/...h-laravel-dusk
  • 13-07-2024, 04:54:11
    #2
    Hata ss var mı ? Biraz detay paylaşırsan.
  • 13-07-2024, 13:48:17
    #3
    hatayı yazarsan bakalım hocam ? ama kısaca söyle anlatabilirim sana her namespace yeni php dosyası

    Route::post('/verify-2fa', [TwoFactorController::class, 'verify'])->name('verify.2fa');
    
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Cookie;
    
    class TwoFactorController extends Controller
    {
        public function verify(Request $request)
        {
            $userInput = $request->input('2fa_code');
            $correct2faCode = '123456'; 
    
            if ($userInput == $correct2faCode) {
                $token = $this->generateSecureToken($request->user()->id);
                $cookie = cookie('remember_me', $token, 30 * 24 * 60); 
    
                return response('2FA doğrulaması başarılı')->cookie($cookie);
            } else {
                return response('2FA doğrulaması başarısız', 403);
            }
        }
    
        private function generateSecureToken($userId)
        {
            return hash('sha256', $userId . str_random(60));
        }
    }
    
    
    
    Route::post('/login', [LoginController::class, 'login'])->name('login');
    
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Auth;
    use Illuminate\Support\Facades\Cookie;
    
    class LoginController extends Controller
    {
        public function login(Request $request)
        {
            $credentials = $request->only('email', 'password');
            $rememberMeToken = $request->cookie('remember_me');
    
            if (Auth::attempt($credentials)) {
                if ($rememberMeToken && $this->verifyToken($rememberMeToken, Auth::user()->id)) {
                    return response('Login successful without 2FA');
                } else {
                    // 2FA doğrulaması yapın
                    return response('Please complete 2FA verification');
                }
            } else {
                return response('Login failed', 403);
            }
        }
    
        private function verifyToken($token, $userId)
        {
            return hash('sha256', $userId . str_random(60)) === $token;
        }
    }
    
    
    namespace Tests\Feature;
    
    use Tests\TestCase;
    use Illuminate\Foundation\Testing\RefreshDatabase;
    use Illuminate\Support\Facades\Auth;
    
    class LoginTest extends TestCase
    {
        use RefreshDatabase;
    
        public function test_login_with_2fa()
        {
            $user = User::factory()->create([
                'email' => 'test@example.com',
                'password' => bcrypt('password'),
            ]);
    
            $response = $this->post('/login', [
                'email' => 'test@example.com',
                'password' => 'password'
            ]);
    
            $response->assertSee('Please complete 2FA verification');
        }
    
        public function test_login_with_remember_me_cookie()
        {
            $user = User::factory()->create([
                'email' => 'test@example.com',
                'password' => bcrypt('password'),
            ]);
    
            $token = hash('sha256', $user->id . str_random(60));
            $cookie = cookie('remember_me', $token, 30 * 24 * 60);
    
            $response = $this->withCookie($cookie)->post('/login', [
                'email' => 'test@example.com',
                'password' => 'password'
            ]);
    
            $response->assertSee('Login successful without 2FA');
        }
    }
  • 13-07-2024, 16:07:38
    #4
    Hata aslında, "invalid cookie domain" şeklinde.
    Auth olmaya çalıştığım domain farklı, dusk çalışan domain farklı.
  • 13-07-2024, 16:09:25
    #5
    inovatifajans adlı üyeden alıntı: mesajı görüntüle
    Hata ss var mı ? Biraz detay paylaşırsan.
    Pos3idon adlı üyeden alıntı: mesajı görüntüle
    hatayı yazarsan bakalım hocam ? ama kısaca söyle anlatabilirim sana her namespace yeni php dosyası
    Yanıtlar için teşekkürler, konuya sorunun kodlaırnı da ekledim stackoverflow sayfasından alıntılayıp.