• 04-06-2019, 13:22:03
    #1
    Herkese hayırlı bayramlar dilerim. Php Slim framework ile api yazımını gerçekleştirdim. Son olarak jwt eklemek istiyorum. Jwt ile ilgili türkçe bir kaynak var mı acaba. ? Aşağıdaki örneği bir türlü uygulayamadım. Bu konuda yardımcı olabilir misiniz. ? Saygılar.


    https://arjunphp.com/secure-web-serv...im3-framework/









    Güncel. Arkadaşlar linkteki yazıdan token elde edemiyorum. Middware kısmında namespacelerde sıkıntı var diyor. Var mı acaba yardımcı olabilecek.



    Proje dizinine girip "composer start" ile paketleri yükledikten sonra çalıştı. Mac ortamında çalıştırdım.
  • 05-06-2019, 15:38:16
    #2
    Aldigin hatayi (trace) koyabilirmisin?

    $app = new SlimApp; 
    $app->add(new TuupolaMiddlewareJwtAuthentication([ 
        "path" => "/api", /* or ["/api", "/admin"] */     
    "secret" => "supersecretkeyyoushouldnotcommittogithub"
     ]));
    sunun calismasi lazim. Tuupola paketini bende kullandim bir proxy api icin. herhangi bir sorunla karsilasmadim.
  • 06-06-2019, 22:51:57
    #3
    lucky13boy adlı üyeden alıntı: mesajı görüntüle
    Aldigin hatayi (trace) koyabilirmisin?

    $app = new SlimApp;
    $app->add(new TuupolaMiddlewareJwtAuthentication([
        "path" => "/api", /* or ["/api", "/admin"] */    
    "secret" => "supersecretkeyyoushouldnotcommittogithub"
     ]));
    sunun calismasi lazim. Tuupola paketini bende kullandim bir proxy api icin. herhangi bir sorunla karsilasmadim.
    Yeni sürümde çalıştıramadım hocam. Sitedeki kişinin paylaştığı kodların indirdim ve sonrasında "composer install" dedim. Tabii içerisindeki paketler vs. o tarihte oluşturulan versiyonları ile kullanmış oldum. Yarın bir deneyip yine buradan yazacağım.Slim ile geliştirmek istedim firebase daha mantıklıydı ama biraz yabancı olmam slimframeworke yönlendirdi beni. Teşekkür.



    lucky13boy adlı üyeden alıntı: mesajı görüntüle
    Aldigin hatayi (trace) koyabilirmisin?

    $app = new SlimApp;
    $app->add(new TuupolaMiddlewareJwtAuthentication([
        "path" => "/api", /* or ["/api", "/admin"] */    
    "secret" => "supersecretkeyyoushouldnotcommittogithub"
     ]));
    sunun calismasi lazim. Tuupola paketini bende kullandim bir proxy api icin. herhangi bir sorunla karsilasmadim.
    Postman ile request atıyorum ama Loading diyor hoccam. Middleware tüm kodlarım bunlar. Başka bir kütüphane mi eklenmesi gerekiyor. composer require tuupola/slim-jwt-auth ile bunu ekledim.

    <?php
    
    use SlimApp;
    
    $app = new SlimApp;
    $app->add(new TuupolaMiddlewareJwtAuthentication([
    "path" => "/api", /* or ["/api", "/admin"] */
    "secret" => "supersecretkeyyoushouldnotcommittogithub"
    ]));
    
    ?>

    Bu da şu an kullandığım projenin middleware.php dosyası

    $app->add(new TuupolaMiddlewareJwtAuthentication([
    "path" => "/api", /* or ["/api", "/admin"] */
    "attribute" => "decoded_token_data",
    "secret" => "supersecretkeyyoushouldnotcommittogithub",
    'secure' => false,
    "algorithm" => ["HS256"],
    "error" => function ($response, $arguments) {
    $data["status"] = "error";
    $data["message"] = $arguments["message"];
    return $response
    ->withHeader("Content-Type", "application/json")
    ->write(json_encode($data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
    }
    ]));
  • 07-06-2019, 15:58:49
    #4
    Loading diyip takilmasi muhtemelen baska bir sorundan kaynakli.
    Route kodunu ve postman request'ini de eklermisin?
  • 07-06-2019, 16:16:38
    #5
    lucky13boy adlı üyeden alıntı: mesajı görüntüle
    Loading diyip takilmasi muhtemelen baska bir sorundan kaynakli.
    Route kodunu ve postman request'ini de eklermisin?
    Postman ile şimdi response 200 dönüyor ama bir veri gözükmüyor.
    /login kısmından token dönüşü oluyor.
    routes.php
    <?php
    
    use SlimApp;
    use SlimHttpRequest;
    use SlimHttpResponse;
    use FirebaseJWTJWT;
    
    return function (App $app) {
    
    
    $app->post('/login', function (Request $request, Response $response, array $args) {
    
    $input = $request->getParsedBody();
    $sql = "SELECT * FROM users WHERE email= :email";
    $sth = $this->db->prepare($sql);
    $sth->bindParam("email", $input['email']);
    $sth->execute();
    $user = $sth->fetchObject();
    
    // verify email address.
    if(!$user) {
    return $this->response->withJson(['error' => true, 'message' => 'These credentials do not match our records.']);
    }
    
    // verify password.
    if (!password_verify($input['password'],$user->password)) {
    return $this->response->withJson(['error' => true, 'message' => 'These credentials do not match our records.']);
    }
    
    $settings = $this->get('settings'); // get settings array.
    
    $token = JWT::encode(['id' => $user->id, 'email' => $user->email], $settings['jwt']['secret'], "HS256");
    
    return $this->response->withJson(['token' => $token]);
    
    });
    
    $app->group('/api', function(SlimApp $app) {
    
    $app->get('/user',function(Request $request, Response $response, array $args) {
    print_r($request->getAttribute('decoded_token_data'));
    
    /*output
                stdClass Object
                    (
                        [id] => 2
                        [email] => arjunphp@gmail.com
                    )
                            
                */
    });
    
    });
    };
    Postman ekran görüntüsü

  • 07-06-2019, 16:26:44
    #6
    return ettigin birsey yok ?
    200 donuyor, evet request dogru ama response body yok o yuzden bos gorunuyor.
  • 07-06-2019, 17:53:29
    #7
    lucky13boy adlı üyeden alıntı: mesajı görüntüle
    return ettigin birsey yok ?
    200 donuyor, evet request dogru ama response body yok o yuzden bos gorunuyor.
    return $request->getAttribute('decoded_token_data'); bu şekilde ekledim ama yine dönüş olmadı.



    "secure" => false parametresini middleware.php dosyasına ekledim. Sonuç Çalıştı. Teşekkür ederim.