Swift에서 AWS Cognito User Pools를 사용해 보았습니다.

9690 단어 SwiftcognitoAWS
Cognito에 새로운 기능 User Pools가 추가되었으므로 Swift에서 사용해 보았습니다.

한 일은 다음과 같습니다.
  • Cognito User Pools 설정
  • Swift 측 초기 설정
  • Sign-up 구현
  • 로그인 구현

  • 클래스 메소드의 블로그 에 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 제휴 부분을 만져보고 싶습니다.

    좋은 웹페이지 즐겨찾기