
# keenauth test login ile test kullanıcılarında oturum açma

`keenauth test login`, bir `development` ortamında bir test kullanıcısının oturumunu açar ve belirteçleri yazdırır; böylece giriş sayfasında tıklamadan API'nizi çağırabilir veya arka ucunuzu test edebilirsiniz. Bir tarayıcının yaptığı gibi gerçek barındırılan girişten geçer ve sabit geliştirme kodu `424242`'yi kullanır (bkz. [Üretim dışı ortamlarda test kullanıcıları ve iletiler](/docs/guides/test-environments)).

Komut bir API anahtarı veya `keenauth login` oturumu gerektirmez: oturumu açan, siz değil test kullanıcısıdır.

## Başlamadan önce

- **Bir test kullanıcısı.** Adresin yerel kısmında `+test` etiketi bulunmalıdır; örneğin `ada+test@example.com` veya `ada+test_1@example.com`. Önce kullanıcıyı oluşturun, örneğin `keenauth users create --email ada+test@example.com` ile. Komut, başka bir adresi istek göndermeden reddeder ve 2 çıkış koduyla sonlanır.
- **Herkese açık bir uygulama.** `--client-id` ile ortamın bir yerel veya tek sayfalık uygulamasının kimliğini verin. Uygulama, e-posta kodu ile oturum açmaya (parolasız `email_otp`) izin vermelidir.
- **Bir yönlendirme URI'si.** Komut varsayılan olarak `http://127.0.0.1:<rastgele port>/callback` adresini kullanır. Uygulama için `http://127.0.0.1/callback` adresini kaydedin: döngü geri (loopback) yönlendirme URI'si her portu kabul eder (RFC 8252). Bu adreste hiçbir şey dinlemez; yönlendirmeyi komut kendisi okur. Başka bir kayıtlı yönlendirme URI'si kullanmak için `--redirect-uri` verin.
- **Ortamın verenı (issuer).** `--issuer` ile verin ya da `KEENAUTH_ISSUER` değişkenini ayarlayın; örneğin `https://acme-dev.keenauth.app`.

## Kullanım

```sh
export KEENAUTH_ISSUER=https://acme-dev.keenauth.app
keenauth test login --user ada+test@example.com --client-id app_01j9z3k4m5n6p7q8r9s0t1v2w3
```

| Bayrak | Açıklama |
|---|---|
| `--user` | Test kullanıcısının e-posta adresi (zorunlu). |
| `--client-id` | Ortamın herkese açık bir uygulamasının kimliği (zorunlu). |
| `--issuer` | Ortamın verenı (issuer) URL'si. Varsayılan: `KEENAUTH_ISSUER` ortam değişkeni. |
| `--scope` | İstenen kapsamlar, boşlukla ayrılmış. Varsayılan: `openid profile email`. Yenileme belirteci almak için `offline_access` ekleyin. |
| `--resource` | Erişim belirtecinin ait olduğu API'nin kaynak belirleyicisi (RFC 8707). |
| `--redirect-uri` | Uygulama için kayıtlı bir yönlendirme URI'si. |
| `--output`, `-o` | `json`, `yaml` veya `table`. Bayrak verilmezse CLI, terminalde tablo, aksi halde JSON yazdırır. |

Çıktı; `token_type`, `access_token`, `id_token` (`openid` istenmişse), `refresh_token` (yalnızca `offline_access` istenmişse), `expires_in` ve `scope` alanlarını içerir. Belirteçleri parola gibi değerlendirin: süreleri dolana kadar test kullanıcısı adına işlem yaparlar. Komut belirteçleri yalnızca standart çıktıya yazar, başka hiçbir yere yazmaz ve kodu asla yazdırmaz.

```sh
ACCESS_TOKEN=$(keenauth test login --user ada+test@example.com --client-id app_01j9z3k4m5n6p7q8r9s0t1v2w3 -o json | jq -r .access_token)
curl -H "Authorization: Bearer $ACCESS_TOKEN" http://localhost:3000/api/orders
```

## Komut ne yapar

1. Ortamın keşif (discovery) belgesini okur ve PKCE (`S256`), `state` ve `nonce` ile bir yetkilendirme isteği açar.
2. Barındırılan girişte adresi girer, bir e-posta kodu ister ve `424242` gönderir. Ortam daha sonra ikinci faktör olarak bir e-posta kodu isterse, komut bu kodu ister ve `424242`'yi yeniden gönderir.
3. Yönlendirmeyi yönlendirme URI'sine kadar takip eder, `state` ve `iss` değerlerini denetler ve yetkilendirme kodunu belirteç uç noktasında değiş tokuş eder.
4. ID belirtecinin, isteğin `nonce` değeriyle uygulamanız için verenden (issuer) geldiğini denetler ve belirteçleri yazdırır.

Oturum açma başka bir şey gerektirirse komut bir hatayla durur; örneğin parola, geçiş anahtarı (passkey), kimlik doğrulama uygulaması, adresin alan adı için kurumsal tek oturum açma, onay sayfası veya kuruluş seçimi.

## Ortamlar

Yalnızca `development` ortamları sabit kodu kabul eder. Komutu yalnızca bir geliştirme ortamında kullanın:

- `staging` ortamında test adreslerine hiçbir şey gönderilmez, ancak sabit kod reddedilir (`401 invalid_credentials`).
- `production` ortamında `+test` adresi sıradan bir adrestir: e-posta kodu gerçekten bu adrese gönderilir ve sabit kod reddedilir.

Sunucu bir adımı reddettiğinde CLI, sorun yanıtını değiştirmeden yazdırır (`error`, `code`, `status`, `detail`, `request_id`); örneğin `code: test_feature_not_in_production`.

## Çıkış kodları

| Kod | Anlamı |
|---|---|
| `0` | Test kullanıcısının oturumu açıldı; belirteçler yazdırıldı. |
| `1` | Oturum açma başarısız oldu: bir OAuth hatası, `state`, `iss` veya `nonce` uyuşmazlığı ya da komutun tamamlayamadığı bir adım. |
| `2` | Kullanım hatası: adreste `+test` etiketi yok, zorunlu bir bayrak veya veren eksik ya da bir değer geçersiz. İstek gönderilmedi. |
| `3` | Sunucu `401` veya `403` yanıtı verdi; örneğin `invalid_credentials` veya `test_feature_not_in_production`. |
