Skip to main content
Lock では、WhatsApp の認証方法と同様に、ユーザーにワンタイムパスワードを記載したメールまたは SMS を送信し、ユーザーがそのパスワードを入力して確認することで認証を行います。この記事では、Lock.Android ライブラリを使用して code を送信する方法を説明します。 同様の結果は、ユーザーがクリックできるリンクを送信することで、パスワードレス認証を自動的に完了させる方法でも実現できますが、追加の設定手順がいくつか必要です。 ユーザーを認証できるようにするには、アプリケーションで Email/SMS 接続を有効にし、Auth0 Dashboard で設定しておく必要があります。

Code パスワードレスの実装

SDK の設定

app/build.gradle ファイルに、Auth0 ドメインおよび Auth0 スキームのプロパティ用の Manifest Placeholders を追加します。これらは、認証結果を受け取る intent-filter を登録するために、ライブラリ内部で使用されます。
plugins {
    id "com.android.application"
    id "kotlin-android"
}

android {
    compileSdkVersion 30
    defaultConfig {
        applicationId "com.auth0.samples"
        minSdkVersion 21
        targetSdkVersion 30
        // ...

        // ---> 次の行を追加
        manifestPlaceholders = [auth0Domain: "@string/com_auth0_domain", auth0Scheme: "https"]
        // <---
    }
}
これらの値は、後でコードから参照できる文字列リソースとして strings.xml ファイルに追加しておくことを推奨します。

SDK の使用

Lock を呼び出すアクティビティで、アプリケーション情報を使って Auth0 のインスタンスを作成します。最も簡単なのは、Android の Context を渡して作成する方法です。これにより、strings.xml ファイルであらかじめ定義した値が使用されます。これを有効にするには、文字列リソースを上記の一覧と同じキーで定義する必要があります。
val account = Auth0(context)
ユーザー認証イベントを処理する AuthenticationCallback の実装を宣言します。認証に成功した場合に返される Credentials オブジェクトには、最終的にアプリケーションまたは API で使用するトークンが含まれます。詳細については、Tokens を参照してください。
private val callback = object : AuthenticationCallback() {
    override fun onAuthentication(credentials: Credentials) {
        // 認証済み
    }

    override fun onError(error: AuthenticationException) {
        // 例外が発生しました
    }
}
Builder クラスを使用して新しい Lock インスタンスを設定します。アカウントの詳細と、前述のコールバック実装を指定します。、スコープ、利用可能な接続などの値もここで設定できます。設定が完了したら、Lock インスタンスをビルドします。このインスタンスは再利用することを前提としているため、不要になったら破棄する必要があります。これを行う適切な場所は、アクティビティの onDestroy メソッドです。 以下のサンプルでは、useCode() メソッドを呼び出して、ユーザーのメールアドレスまたは電話番号に code を送信するよう Lock を設定しています。
// このアクティビティはパスワードレス Lock を表示します
class MyActivity : AppCompatActivity() {

    private lateinit var lock: PasswordlessLock

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val account = Auth0(this)
        // Lock を一度インスタンス化する
        lock = PasswordlessLock.newBuilder(account, callback)
            .useCode()
            // Lock をカスタマイズする
            .build(this)
    }

    override fun onDestroy() {
        super.onDestroy()
        // 重要!Lock とそのリソースを解放する
        lock.onDestroy(this)
    }

    private val callback = object : AuthenticationCallback() {
        override fun onAuthentication(credentials: Credentials) {
            // 認証済み
        }

        override fun onError(error: AuthenticationException) {
            // 例外が発生しました
        }
    }
}
最後に、アクティビティ内で PasswordlessLock ウィジェットを起動します。
startActivity(lock.newIntent(this))
有効になっているパスワードレス接続に応じて、Lock は code をメールまたは SMS で送信します。利用可能な場合は、最初に ‘email’ 接続が選択されます。次に、ユーザーは確認ステップで code を入力する必要があります。その値がサーバーで想定されている値と一致すれば、認証は成功します。