Firebaseのmail/pass認証機能をiOSで使う

#メルアドとパスワードを入力してユーザーを作る/ログインするのfirebaseで作ってみました

シングルページプロジェクトを作っておいてください
認証用のfirebaseのプロジェクトも作っておいてください
導入部分も書いてあります

#まずfirebaseをiosアプリに追加
とりあえずfirebaseのアカウントを作成
googleアカウントを持っていれば一瞬で終わります

新規プロジェクトを作成してiosにアプリにfirebaseを追加を選択
<img width="923" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/6eb02712-6a44-2cf8-436d-88ba62df1747.png">
<br />
<img width="678" alt="2.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/a73d540e-c0d3-6a46-6357-672be8abad8c.png">


ターミナルでアプリケーションのXcodeプロジェクトの場所に移動してください
podfile作成

```
pod init
```
vimで編集

```
vim podfile
```
pod 'Firebase/Auth'をtargetとendの間に入れる

```
target 'アプリ名' do
pod 'Firebase'
pod 'Firebase/Auth'
end
```

インストール
```
pod install
```

<img width="392" alt="3.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/44aca82e-51bd-461e-56dc-d2a916621bdf.png">


インストール完了です
workspaceファイルを開いてください
<img width="140" alt="4.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/a8b10310-8d9b-0ee6-0eb6-2e8cf0e793b1.png">

#Firebaseのコンソールでメルアド/パスワードの認証設定する
Auth->ログイン方法をクリック

<img width="960" alt="6.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/2032af9d-5c36-f1de-e28d-171d737d37e4.png">


<img width="957" alt="7.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/630b2e8e-fc3b-71e1-686f-0625698eef0d.png">

設定完了です

#xcodeでプロジェクトを編集していきます


```lang:AppDelegate.swift

import UIKit
import Firebase

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        
        FIRApp.configure()
        return true
    }

```

storyboardは最小限しか使わないタイプです
バックグラウンドをダークグレーにしました

テキストフィールドなどはコードで書いていきますね

```lang:ViewController.swift

import UIKit
import Firebase

class ViewController: UIViewController {
    
    var email:UITextField!
    var password:UITextField!
    var signin:UIButton!
    var create:UIButton!
    let BTN_SIGN = 0
    let BTN_C = 1
    
    

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        let x = (UIScreen.mainScreen().bounds.size.width-200)/2
        let y = (UIScreen.mainScreen().bounds.size.height+80)/9
        
        email=makeTextField(CGRectMake(x, y, 200, 30), text: "")
        self.view.addSubview(email)
        
        password=makeTextField(CGRectMake(x, y+40, 200, 30), text: "")
        password.secureTextEntry = true
        self.view.addSubview(password)
        
        
        signin=makeButton(CGRectMake(x, y+80, 60, 30), text: "signin", tag: BTN_SIGN)
        signin.addTarget(self, action:#selector(ViewController.onClick(_:)), forControlEvents: UIControlEvents.TouchUpInside)
        self.view.addSubview(signin)
        
        create=makeButton(CGRectMake(x+100, y+80, 60, 30), text: "create", tag: BTN_C)
        create.addTarget(self, action: #selector(ViewController.onClick(_:)), forControlEvents: UIControlEvents.TouchUpInside)
        self.view.addSubview(create)
        
    }
    
    func onClick (sender:UIButton){
        if sender.tag == BTN_SIGN {
            
            
            FIRAuth.auth()?.signInWithEmail(email.text!, password: password.text!, completion: { user, error in
                if let error = error {
                    print("サインインできません \(error)")
                    return
                }
                
                if let user = user {
                    print("user : \(user.email!) サインインできました")
                }
            })
            
            
        }else if sender.tag == BTN_C {
            
            FIRAuth.auth()?.createUserWithEmail(email.text!, password: password.text!, completion: { user, error in
                if let error = error {
                    print("ユーザーを作れませんでした \(error)")
                    return
                }
                
                if let user = user {
                    print("user : \(user.email!)ユーザーを作成しました")
                }
            })
            
        }
        
    }
    
    
    func makeTextField(frame:CGRect,text:String)->UITextField{
        let textField = UITextField()
        textField.frame = frame
        textField.text = text
        textField.backgroundColor = UIColor.whiteColor()
        textField.layer.cornerRadius = 8
        textField.clearButtonMode = UITextFieldViewMode.WhileEditing
        
        return textField
    }
    
    func makeButton(frame:CGRect,text:String,tag:Int)->UIButton {
        let button = UIButton(type:UIButtonType.System)
        button.frame = frame
        button.setTitle(text , forState: UIControlState.Normal)
        button.tag = tag
        return button
    }
    

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}


```

走らせるとこんな感じになります↓

<img width="316" alt="5.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/98051020-05b6-a211-29dd-4ea0b491eee2.png">


#入力してユーザーをつくってみます

メールアドレスとパスワードを入力してcreateをタップ
<img width="309" alt="8.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/625d6e9e-dc74-d537-830e-1b2a7885b8d3.png">



そうすると
<img width="262" alt="9.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/97d40879-63a2-beb3-6531-afe434c832bd.png">

このままsigninをタップすると
<img width="261" alt="10.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/418e5a5a-4e40-6e56-a314-9c4566453348.png">


<img width="258" alt="11.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/8e446777-8cf9-a2cb-7e27-c2aa3f22cee5.png">




同じメールアドレスで登録しようとすると
こんな感じのが出てきます↓
<img width="192" alt="13.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/7b32e97c-eb8c-f266-31aa-5f79f12b0c06.png">

<img width="271" alt="14.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/1f1fb4a6-5177-ca52-d2f2-8402f2b25f03.png">


#Firebaseのコンソールでも確認できる
<img width="638" alt="15.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/86693ffa-0ab6-3de6-c62e-c9d9960b07a6.png">



@つけなかったり.なかったりするとエラーになる
パスワードも６文字以下はエラー↓
<img width="309" alt="16.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/9f05c11d-5429-640d-6983-993def2e7c2d.png">

<img width="452" alt="17.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/620897d2-8153-8fc2-afb8-d6299e728e70.png">