server2021. 9. 10. 11:19

[spring boot]firebase SDK JWT firebase custom token 만드는 방법

 

firebase 에서 

 

FirebaseAuth.getInstance().createCustomToken(userRecord.getUid());

 

이렇게 하면 token 을 만들어준다..

 

jwt 라이브러리를 자기네도 사용하니 custom으로 만들 수 있다는것이다.. 

 

이걸 클라이언트에 return해주고 token으로 로그인 가능하게 할 수 있다..

 

자 그러면 custom token을 만들어보자..

 

jwt 라이브러리 넣고 하는건 생략하고 , 본론만 애기한다.

 

밑에 사진에서 보는거와 같이.. 넣으면 되는데 ... 

 

private String makeJwtToken(String uid, String email) {

// Header 부분 설정

Map<String, Object> headers = new HashMap<>();

headers.put("alg", "RS256");

 

Date now = new Date();

 

String jwt = Jwts.builder()

.setHeader(headers)

.setIssuedAt(now)

.setExpiration(new Date(now.getTime() + Duration.ofDays(300).toMillis()))

.claim("uid", uid)

.claim("aud","https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit")

.claim("iss", "프로젝트 서비스 계정 이메일주소")

.claim("sub", "프로젝트 서비스 계정 이메일주소")

.compact();

 

return jwt;

}

 

자 토탈 소스는 이건데..

 

중요한 부분만 설명한다... 

 

uid무조건 넣어야 그걸 기반으로 만드는거다

 

iss , sub 넣어야 할텐데 -> 프로젝트 서비스 계정 이메일주소 라고 나와있는데 정확하게 어떤 주소를 넣어야 되냐면

 

프로젝트 설정 -> 서비스 계정 -> Firebase 서비스 계정을 넣어줘야 한다..

 

이걸 제대로 안 넣어주면 token이 제대로 만들어 지지 않았다고 한다.

 

 

 

 

[참조] https://firebase.google.com/docs/auth/admin/create-custom-tokens#java_1

 

커스텀 토큰 만들기  |  Firebase

Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기 의견 보내기 커스텀 토큰 만들기 Firebase는 보안 JSON 웹 토큰(JWT)으로 사용자나 기기 인증이 가능해

firebase.google.com

 

Posted by thdeodls85
ios,swift2020. 3. 30. 11:04

[ios]swift firebase auth password update 방법

 

firebase password 업데이트 할 경우가 필요하다..

 

// 사용자 비밀번호 설정하기

    private func loadFirebaseUpdatePassword(password : String)

    {

        Auth.auth().currentUser?.updatePassword(to: password, completion: { (error) in

            guard error == nil else

            {

                if let errorCode : AuthErrorCode = AuthErrorCode(rawValue: error!._code)

                {

                    print("-> error -> \(error?.localizedDescription ?? "") -> code -> \(errorCode.rawValue)")

                                           

                    switch errorCode.rawValue

                    {

                    case AuthErrorCode.weakPassword.rawValue:

                        // 너무 안전성이 낮은 비밀번호를 설정하려고 했음을 나타냅니다. NSError.userInfo 사전 객체 내의 NSLocalizedFailureReasonErrorKey 필드에 사용자에게 표시할 수 있는 자세한 설명이 있습니다.

                        self.setAlert(title: "error", msg: "이메일 안정성이 낮습니다.")

                        return

                    case AuthErrorCode.requiresRecentLogin.rawValue:

                        // 사용자의 비밀번호를 변경하는 것은 보안에 민감한 작업이므로, 사용자가 최근 로그인한 적이 있어야 진행할 수 있습니다. 이 오류는 사용자가 최근에 로그인하지 않았음을 나타냅니다. 해결하려면 FIRUser에 reauthenticateWithCredential:completion:을 호출하여 사용자를 재인증하세요.

                        self.setAlert(title: "error", msg: "재인증 해야 합니다.")

                        return

                    case AuthErrorCode.operationNotAllowed.rawValue:

                        // 관리자가 지정 ID 제공업체의 로그인을 사용 중지했음을 나타냅니다.

                        self.setAlert(title: "error", msg: "관리자가 지정 ID 제공업체의 로그인을 사용 중지했습니다.")

                        return

                    default:

                        self.setAlert(title: "error", msg: "error -> \(error?.localizedDescription ?? "") -> code -> \(errorCode.rawValue)")

                        return

                    }

                }

                return

            }

        })

        

        self.setAlert(title: "확인", msg: "새로운 비밀번호로 변경 완료되었습니다.")

    }

Posted by thdeodls85
ios,swift2020. 3. 30. 11:00

[ios]swift firebase auth password reset mail 보내는방법

 

비밀번호 찾기를 할경우, 이메일을 보내서 갱신 시켜줘야 한다.. 

 

firebase 에서 기본적으로 제공한다..

 

 private func loadFirebaseSendPasswordReset()

    {

        let email = self.emailTextField.text!

        

        // email 보내기

        Auth.auth().sendPasswordReset(withEmail: email) { (error) in

            if let error = error

            {

                // firebase 등록 된 실패 error code 없다.

                if let errorCode : AuthErrorCode = AuthErrorCode(rawValue: error._code)

                {

                    print("-> error -> \(error.localizedDescription) -> code -> \(errorCode.rawValue)")

                }

            }

            else

            {

                // success

                self.setAlert(title: "", msg: "메일전송하였습니다. 비밀번호를 변경 부탁드립니다.")

            }

        }

    }

Posted by thdeodls85