포스트맨(Postman) 에서 firebase login 정보 사용하기(Get Firebase Access Token in POSTMAN)
몇 년 전까지는 단순하게 api만 확인할 수 있었던 포스트맨이 어느새 많이 발전이 돼서 여러 가지 기능을 지원하게 되었다. (여러 가지 기능을 지원하면서 구독의 영역으로....)
발전된 기능 중에 Script 기능을 활용하여 여러 가지 변수들을 api에 넣을 수 있게 되었다.
예를 들어 현재 date 정보를 api에 넣는 경우
var date = new Date(Date.now() - new Date().getTimezoneOffset() * 60000).toISOString().substr(0, 10);
위와 같이 date를 구하여 해당 변수를 api에 넣어 사용할 수 있다.
기본적인 기능을 사용하는 방법은 아래 blog를 참고하면 좋다(정리를 정말 잘하셨음)
이 Script 기능을 이용하여 firebase에 로그인하고 로그인 정보를 이용하여 api를 호출 할 수 있다.
https://stackoverflow.com/questions/49934701/get-firebase-access-token-in-postman
1. firebase api key 확인
파이어베이스 콘솔 > 프로젝트 설정 화면에 들어가면 아래 두곳에서 api키를 확인 할 수 있다.
해당키를 저장해두자(아래는 테스트용으로 만든거라 공개한건데 공개하면 안된다)
2. Environments 변수 설정
Environments 메뉴에 1번에서 구한 "api_key" 값을 추가한다.
"auth_username","auth_password"도 firebase에 등록 되어 있는 걸 사용한다.
3. Script 작성
Pre-request Script메뉴에 아래 코드를 넣는다.
url은 임의의 값을 넣고 send를 누루면 firebase의 uid, token 값등을 얻어 사용 할 수 있다.
''에는 Environments에 있는 변수 값들이다. (소스 설명은 소스에 주석 처리)
//1번에서 구한 api_key를 사용
const apiKey = pm.environment.get('api_key');
if ( ! apiKey) {
return
}
// 반복 호출을 방지 하기 위한 코드
const tokenEnv = pm.environment.get('token_env')
if (tokenEnv && tokenEnv === pm.environment.name) {
const tokenTimestamp = Number.parseInt(pm.environment.get('token_timestamp'), 10)
const elapsed = Date.now() - tokenTimestamp
if (elapsed < 20 * 60000) {
return
}
}
// 직접적으로 firebase에 로그인 하는 코드
pm.sendRequest({
url: `https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=${apiKey}`,
method: 'POST',
header: {
'Content-Type': 'application/json',
},
body: {
mode: 'raw',
raw: JSON.stringify({
email: pm.environment.get('auth_username'),
password: pm.environment.get('auth_password'),
returnSecureToken: true,
}),
},
}, function (err, res) {
let json
if ( ! err) {
json = res.json()
if (json.error) {
err = json.error
}
}
if (err) {
pm.environment.unset('auth_token')
pm.environment.unset('token_env')
pm.environment.unset('token_timestamp')
throw err
}
// 얻어진 값들은 Environments에 저장.
pm.expect(json.idToken).to.not.be.undefined
pm.environment.set('auth_token', json.idToken)
pm.environment.set('token_env', pm.environment.name)
pm.environment.set('token_timestamp', Date.now())
pm.environment.set('uid', json.localId)
})