refresh

今まではcreateSessionで都度、tokenを取得し、新しいsessionを作成してきました。

これらsessionは2時間有効で、apiを呼び出すたびにsessionを作成していると有効なsessionがいくつもできてしまいます。

そして、それぞれが2時間後に無効になります。

これを回避する方法としては、refreshSessionがあります。refresh-tokenとも呼ばれます。

基本的には、https://bsky.social/xrpc/com.atproto.server.refreshSessionにtokenとしてrefreshJwtを指定するだけです。

$ cat ~/.config/atr/token.json|jq -r .refreshJwt
$ refresh=`cat ~/.config/atr/token.json|jq -r .refreshJwt`
$ curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $refresh" https://bsky.social/xrpc/com.atproto.server.refreshSession

これを保存しておけば、約2ヶ月有効だそうです。

これをrustで書いてみると、こんな感じになります。

src/refresh.rs

extern crate reqwest;
use crate::token_toml;
use crate::url;
use serde_json::json;

pub async fn post_request() -> String {

    let access = token_toml(&"access");
    let refresh = token_toml(&"refresh");
    let did = token_toml(&"did");
    let handle = token_toml(&"handle");

    let url = url(&"session_refresh");

    let client = reqwest::Client::new();
    let res = client
        .post(url)
        .header("Authorization", "Bearer ".to_owned() + &refresh)
        .send()
        .await
        .unwrap()
        .text()
        .await
        .unwrap();

    return res
}

results matching ""

    No results matching ""