Giriş yapmadınız.

#1 13.06.2019 23:04:39

hanifeoglu
Üye
Kayıtlı: 14.11.2018
Mesajlar: 9

api den dönen tokan i config veya .env kaydetmek istiyorum

bir apiye baglanarak token alıyorum.
şu şekilde;
$res = json_decode($request->getBody(), true);
$token = $res['token'];

daha sonra bu aldığım token ı .env dosyasına veya config'e set etmek istiyorum.

şu şekilde deniyorum;

$res = json_decode($request->getBody(), true);
$token = $res['token'];
putenv ("APP_API_KEY=$token"); //  denedim olmadı smile

.env dosyam şu şekilde;
APP_API_KEY=""

fakat token ı .env dosyasındaki APP_API_KEY="" buraya kaydetmiyor.

Çevrimdışı

#2 14.06.2019 09:38:27

hanifeoglu
Üye
Kayıtlı: 14.11.2018
Mesajlar: 9

Yanıt: api den dönen tokan i config veya .env kaydetmek istiyorum

Veya başka önerisi olan var mı?

Çevrimdışı

#3 14.06.2019 10:08:23

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,703
Website

Yanıt: api den dönen tokan i config veya .env kaydetmek istiyorum

Session aktif ise oturum değişkeni olarak tutun. Sonuçta token sürekli değişiyorsa bir yere kaydetmeye gerek yok.

Session yoksa cache kullanabilirsiniz.

Token değişmiyorsa config dosyasına elle ekleyebilirsiniz.

.env dosyasını sunucuya göndermiyoruz.

Çevrimdışı

#4 14.06.2019 18:38:23

hanifeoglu
Üye
Kayıtlı: 14.11.2018
Mesajlar: 9

Yanıt: api den dönen tokan i config veya .env kaydetmek istiyorum

Provider/AppServiceProvider.php
public function boot()
    {
        $client = new Client();
        $request = $client->request('POST', '[url]http://192.168.53.27:1996/api/login/[/url]',
            [
                'form_params' => [
                    'user_name' => 'user',
                    'password' => 'pass',
                ]
            ]);

        // echo $request->getStatusCode();
        $res = json_decode($request->getBody(), true);
        $token = $res['token'];
        Cache::put('APP_API_KEY', $token, 86400);
    }
//Cache e kaydet
Cache::put('APP_API_KEY', $token, 86400);

GuzzleController.php
public function getToken()
{
    return   Cache::get('APP_API_KEY');
}

GuzzleController.php 
    public function getToken()
    {
        return   Cache::get('APP_API_KEY');
    }
    public function users()
    {
        $client = new Client();
        $request = $client->request('POST', '[url]http://192.168.53.27:1996/api/users/[/url]', [
                "headers" => [
                    "Accept" => "application/json",
                    'Authorization' => 'Bearer ' . $this->getToken(),
                    "Content-type" => "application/json"
                ]]);
        
        return json_decode($request->getBody(), true);
    }
//donen response 
{  
      "id":6,
      "username":"salo",
      "password":"123",
      "status":true,
      "firstname":"oef",
      "lastname":"dsf",
      "isadmin":false,
      "email":"[email protected]"
   }

Son düzenleyen hanifeoglu (14.06.2019 18:38:57)

Çevrimdışı

#5 14.06.2019 19:08:42

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,703
Website

Yanıt: api den dönen tokan i config veya .env kaydetmek istiyorum

AppServiceProvider::boot() içerisinde o işlemi yaptırmayın. Guzzle bir sorunla karşılaştığında Exception verip uygulamanızı kesecek. Ayrıca kurduğunuz cache mantığı yanlış olmuş. Her seferinde bağlanıp tokenı baştan çekiyor, üstelik bunu her istekte yapıyor.

Bu işi GuzzleController::getToken() içerisinde yaptırabilirsiniz:

public function getToken(Client $client)
{
    return Cache::remember('APP_API_KEY', 86400, function () use ($client) {
        
        $request = $client->request('POST', 'http://192.168.53.27:1996/api/login/',
            [
                'form_params' => [
                    'user_name' => 'user',
                    'password' => 'pass',
                ]
            ]
        );

        return json_decode($request->getBody(), true)['token'];
    
    });
}

gibi. Hata kontrolü vs onlar size kalmış.

Çevrimdışı

#6 14.06.2019 21:27:13

deathisonitsway
Üye
Kayıtlı: 01.02.2016
Mesajlar: 476

Yanıt: api den dönen tokan i config veya .env kaydetmek istiyorum

Hanifeoğlu o yazdığın provider içindeki kodun istediğin istemediğin her istekte çalıştığının farkındasın değil mi? Şu providerların mantığı ile ilgili türkçe kaynak yetersiz sanırım


Laravel does not save you. Php knowledge only save you. Do not become a Laravel programmer, just the opposite,become php developer.

Çevrimdışı

#7 15.06.2019 13:44:30

hanifeoglu
Üye
Kayıtlı: 14.11.2018
Mesajlar: 9

Yanıt: api den dönen tokan i config veya .env kaydetmek istiyorum

@mgsmus çok teşekkür ederim, çok daha  oldu hemde "dependency injection" kullanımı için de çok iyi bir kullanım olmuş

Code refactoring   yaptıkça burandan paylaşmış olcağım.
Teşekkürler

Çevrimdışı

#8 15.06.2019 13:54:53

hanifeoglu
Üye
Kayıtlı: 14.11.2018
Mesajlar: 9

Yanıt: api den dönen tokan i config veya .env kaydetmek istiyorum

Merhaba  deathisonitsway

AppServiceProvider konusunu açıkçası daha yeni yeni kavrıyorum. senin söylemin ile daha net  kavradım. şimdi
peki bu işin en mantıklısı nasıl olur yani benim senaryoma göre veya benzer konuda  "best practice"

Laravel konusunda yeni olduğum için çok iyi yönetebildiğim bir konu değil açıkcası  fakat günden güne öğreniyorum bu konusa yavaş da öğreniyorum  ve daha net  anlıyorum yaptıkça
buradaki benim yapmak istedigim senaryo şu şekilde aslında :

user web  siteye username and pass girip login (bu bilgileri gonderip token cache yazıcam) bu token expiredate 2 day ayarladım web services tarafında token 2 gün gecerli saniye cinsinden "76000" normalde 2 gün 86400 yapıyor
daha  sonra user sayfalarda gezerken  bu kontrolu yapıcam

if (Cache::has('APP_API_KEY')) {
    // true or false deöencek bana 
}

false ise /login  gondericem
aslında yapmak istedigim bu

Çevrimdışı

Forum alt kısmı