Swift에서 AWS Cognito User Pools를 사용해 보았습니다.
한 일은 다음과 같습니다.
※ 클래스 메소드의 블로그 에 Objective-C판이 있었으므로, 참고로 했습니다.
Cognito User Pools 설정
Manage your User Pools를 선택하고 Create a User Pool을 선택합니다.
Pool name에 임의의 이름을 입력하고 Step through settings를 선택합니다.
사용자별로 검색할 속성 선택
나는 email과 name을 선택했다.
비밀번호 정책 결정
다른 요소 인증과 메일이나 SMS의 Verify를 할까
제 경우에는 이메일 주소를 받고 있기 때문에 이메일의 Veryfy 만 켤 수 있습니다.
앱 등록
Swift에서 사용하려면 앱을 등록해야 합니다.
"Add an app"를 선택하고 적절한 앱 이름을 입력하십시오.
트리거에서 Lambda 시작
로그인 시나 사용자 작성 시 등에 Lambda를 기동할 수 있습니다.
로그를 Dynamo에 삽입하거나 할 수 있어 편리할 것 같습니다만, 이번은 이용하지 않으므로 그대로 「Next step」을 눌러 주세요.
마지막으로 "Create pool"을 선택하십시오.
Swift 측 초기 설정
포드 설치
Cognito 관련 라이브러리를 설치해야 합니다.
Podfile
platform :ios, '8.0'
pod 'AWSCore'
pod 'AWSCognitoIdentityProvider'
vi Podfile
pod install
Bridging-Header 추가
아래 파일을 만들고,
CognitoUserpoolSample-Bridging-Header.h
#import <AWSCore/AWSCore.h>
#import <AWSCognitoIdentityProvider.h>
Build Settings > Swift Conpiler - Code Generation > Objective-C Bridging Header에 위의 파일을 지정한다.
"$(SRCROOT)/$(PROJECT)/CognitoUSerpoolSample-Bridging-Header.h"
Sign-up 구현
먼저 Appdelegate.swift에서 Pool을 초기화합니다.
AppDelegate.swift
let configuration: AWSServiceConfiguration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: nil)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
let userPoolConfigration: AWSCognitoIdentityUserPoolConfiguration =
AWSCognitoIdentityUserPoolConfiguration(clientId: "***1", clientSecret: "***2", poolId: "***3")
// 名前をつけておくことで、このプールのインスタンスを取得することができます
AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithUserPoolConfiguration(userPoolConfigration, forKey: "AmazonCognitoIdentityProvider")
ClientId 및 clientSecret은 Apps 탭에서
poolId는 Pool details에서 확인할 수 있습니다.
사용자 작성 부분은 다음과 같이 구현하고 있습니다.
에러 핸들링 등은 제대로 되어 있지 않습니다.
var pool: AWSCognitoIdentityUserPool?
override func viewDidLoad() {
super.viewDidLoad()
pool = AWSCognitoIdentityUserPool(forKey: "AmazonCognitoIdentityProvider")
}
@IBAction func pushed(sender: AnyObject) {
let email: AWSCognitoIdentityUserAttributeType = AWSCognitoIdentityUserAttributeType()
email.name = "email"
email.value = self.mail.text!
pool!.signUp(self.name.text!, password: self.password.text!, userAttributes: [email], validationData: nil).continueWithBlock({ task in
if((task.error) != nil) {
print(task.error?.code)
} else {
print("OK")
}
return nil
})
}
로그인 구현
@IBAction func login(sender: AnyObject) {
let user: AWSCognitoIdentityUser = pool!.getUser(self.userName.text!)
user.getSession(self.userName.text!, password: self.password.text!, validationData: nil, scopes: nil).continueWithBlock({task in
if((task.error) != nil) {
print(task.error)
} else {
print("OK")
}
return nil
})
}
로그인하기 전에 사용자의 Verify를하지 않으면 오류가 발생합니다.
Verify 부분은 만들지 않았기 때문에 관리 콘솔에서 활성화되었습니다.
요약
User Pools 매우 편리합니다!
다음은 Lambda 제휴 부분을 만져보고 싶습니다.
Reference
이 문제에 관하여(Swift에서 AWS Cognito User Pools를 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ketancho/items/f96378723a29cf802354텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)