Статьи

Аутентификация без пароля с помощью аккаунта

Аутентификация без пароля пропускается с использованием пароля для регистрации или входа в систему. Вместо этого аутентификация пользователя подтверждается либо одноразовым кодом подтверждения SMS, отправленным на телефон пользователя, либо одноразовой ссылкой на его адрес электронной почты.

  • Удобный процесс входа и регистрации для ваших пользователей.
  • Обеспечивает безопасный доступ к вашему приложению, поскольку пользователь не будет повторно использовать пароли или прибегать к легко угадываемым паролям (таким как «пароль»).
  • Избегает налогообложения ваших пользователей с необходимостью создавать и запоминать уникальные пароли

В этом кратком учебном пособии я покажу вам, как использовать Account Kit от Facebook для аутентификации без пароля в вашем приложении Android. Ваши пользователи будут регистрироваться и входить в систему с помощью номера телефона или адреса электронной почты. Пользователям даже не нужно иметь учетную запись Facebook для аутентификации.

Кроме того, Account Kit прост в реализации и избавляет от необходимости утомительно создавать систему входа в систему.

Скриншот домашней страницы Facebook Account Kit

Следующая диаграмма должна прояснить, как работает Account Kit.

Как работает Facebook Account Kit

Аутентификация происходит в серии обменов между пользователем и приложением. Сначала пользователь инициирует вход в систему, возможно, загрузив приложение на свой телефон. Затем код подтверждения отправляется в SMS пользователя или разовая ссылка отправляется по электронной почте. После этого, если пользователь введет код проверки или щелкнет ссылку, они будут аутентифицированы для приложения.

Еще одна интересная особенность Facebook Account Kit — это то, что когда ваш пользователь вводит свой номер телефона в приложение, Account Kit попытается сопоставить его с номером телефона, подключенным к профилю Facebook пользователя. Если пользователь вошел в приложение Android Facebook и телефонные номера совпадают, Account Kit пропустит отправку кода подтверждения SMS и пользователь войдет в систему более легко.

Чтобы начать использовать Account Kit, вам потребуется:

Перейдите на панель инструментов своего приложения, нажмите кнопку « Добавить продукт» и выберите « Account Kit» . Затем нажмите кнопку « Начать» , чтобы добавить Account Kit. То, что вы увидите, это конфигурация настроек для Account Kit.

Настройки Account Kit

Добавьте зависимость с последней версией SDK Account Kit в файл build.gradle и синхронизируйте ваш проект.

1
2
3
4
5
6
7
repositories {
  jcenter()
}
 
dependencies {
  compile ‘com.facebook.android:account-kit-sdk:4.+’
}

Добавьте свой идентификатор приложения Facebook, Account Kit клиентский токен (он доступен на панели настроек аккаунта) и INTERNET разрешение на AndroidManifest. XML

1
<uses-permission android:name=»android.permission.INTERNET» />
01
02
03
04
05
06
07
08
09
10
11
<meta-data android:name=»com.facebook.accountkit.ApplicationName»
           android:value=»@string/app_name» />
<meta-data android:name=»com.facebook.sdk.ApplicationId»
           android:value=»@string/FACEBOOK_APP_ID» />
<meta-data android:name=»com.facebook.accountkit.ClientToken»
           android:value=»@string/ACCOUNT_KIT_CLIENT_TOKEN» />
 
<activity
  android:name=»com.facebook.accountkit.ui.AccountKitActivity»
  android:theme=»@style/AppLoginTheme»
  tools:replace=»android:theme»/>

Включите идентификатор вашего приложения и токен клиента Account Kit в файл strings.xml .

1
2
<string name=»FACEBOOK_APP_ID»>YourAPPId</string>
<string name=»ACCOUNT_KIT_CLIENT_TOKEN»>YourAccountKitClientToken</string>

Также включите тему Account Kit в ваши стили. XML

1
<style name=»AppLoginTheme» parent=»Theme.AccountKit» />

В своем классе приложения инициализируйте SDK (не забудьте включить имя android:name в свой AndroidManifest.xml ).

1
2
3
4
5
6
7
8
public class MyApplication extends Application {
 
    @Override
    public void onCreate() {
        super.onCreate();
        AccountKit.initialize(getApplicationContext());
    }
}

Мы должны написать отдельный обработчик для аутентификации по SMS и электронной почте.

Для SMS в строке 5 мы указываем тип входа LoginType.PHONE .

01
02
03
04
05
06
07
08
09
10
11
12
public void onSMSLoginFlow(View view) {
    final Intent intent = new Intent(this, AccountKitActivity.class);
    AccountKitConfiguration.AccountKitConfigurationBuilder configurationBuilder =
            new AccountKitConfiguration.AccountKitConfigurationBuilder(
                    LoginType.PHONE,
                    AccountKitActivity.ResponseType.CODE);
    // … perform additional configuration …
    intent.putExtra(
            AccountKitActivity.ACCOUNT_KIT_ACTIVITY_CONFIGURATION,
            configurationBuilder.build());
    startActivityForResult(intent, 101);
}

Для электронной почты в строке 5 мы указываем тип входа LoginType.EMAIL .

01
02
03
04
05
06
07
08
09
10
11
12
public void onEmailLoginFlow(View view) {
    final Intent intent = new Intent(this, AccountKitActivity.class);
    AccountKitConfiguration.AccountKitConfigurationBuilder configurationBuilder =
            new AccountKitConfiguration.AccountKitConfigurationBuilder(
                    LoginType.EMAIL,
                    AccountKitActivity.ResponseType.CODE);
    // … perform additional configuration …
    intent.putExtra(
            AccountKitActivity.ACCOUNT_KIT_ACTIVITY_CONFIGURATION,
            configurationBuilder.build());
    startActivityForResult(intent, 101);
}

Вот простой макет для экрана, который показывает кнопки для входа с помощью SMS или электронной почты.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version=»1.0″ encoding=»utf-8″?>
<LinearLayout
        xmlns:android=»https://schemas.android.com/apk/res/android»
        xmlns:tools=»http://schemas.android.com/tools»
        android:id=»@+id/activity_main»
        android:layout_width=»match_parent»
        android:layout_height=»match_parent»
        android:paddingLeft=»@dimen/activity_horizontal_margin»
        android:paddingRight=»@dimen/activity_horizontal_margin»
        android:paddingTop=»@dimen/activity_vertical_margin»
        android:paddingBottom=»@dimen/activity_vertical_margin»
        android:orientation=»vertical»
        tools:context=»com.chikeandroid.tutsplus_facebook_accountkit.MainActivity»>
 
    <Button
            android:layout_width=»match_parent»
            android:layout_height=»wrap_content»
            android:text=»Login By SMS»
            android:onClick=»onSMSLoginFlow»/>
 
    <Button
            android:layout_width=»match_parent»
            android:layout_height=»wrap_content»
            android:text=»Login By Email»
            android:onClick=»onEmailLoginFlow»/>
</LinearLayout>

Теперь, когда пользователь пытается войти в систему, мы получим ответ в onActivityResult() . В этом методе мы можем обрабатывать успешные, отмененные и неудачные проверки подлинности.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
     
    if (requestCode == 101) { // confirm that this response matches your request
        AccountKitLoginResult loginResult = data.getParcelableExtra(AccountKitLoginResult.RESULT_KEY);
        String toastMessage;
        if (loginResult.getError() != null) {
            toastMessage = loginResult.getError().getErrorType().getMessage();
            showErrorActivity(loginResult.getError());
        } else if (loginResult.wasCancelled()) {
            toastMessage = «Login Cancelled»;
        } else {
            if (loginResult.getAccessToken() != null) {
                toastMessage = «Success:» + loginResult.getAccessToken().getAccountId();
            } else {
                toastMessage = String.format(
                        «Success:%s…»,
                        loginResult.getAuthorizationCode().substring(0, 10));
            }
 
            // If you have an authorization code, retrieve it from
            // loginResult.getAuthorizationCode()
            // and pass it to your server and exchange it for an access token.
 
            // Success!
            goToMyLoggedInActivity();
        }
 
        // Surface the result to your user in an appropriate way.
        Toast.makeText(this, toastMessage, Toast.LENGTH_LONG).show();
    }
}

Теперь мы можем запустить наше приложение для проверки потоков смс и электронной почты!

Готовое приложение

Обратите внимание, что JavaScript SDK Account Kit не поддерживает вход в WebView, поэтому вы не можете входить в систему из WebView с помощью Account Kit. Вы должны написать свой интерфейс входа в Account Kit с собственным кодом.

Из этого краткого учебного пособия вы узнали о проверке подлинности без пароля с помощью комплекта учетных записей Facebook: что это такое, почему вы можете подумать об ее использовании и как реализовать ее в своем приложении для Android.

Однако, предупреждающее слово: некоторые считают аутентификацию без пароля менее безопасной. Большинство людей не будет использовать его, когда безопасность является приоритетом, например, с банковским приложением. Поэтому будьте осторожны в отношении того, когда его использовать и когда использовать более традиционную схему аутентификации.

Чтобы узнать больше о Facebook Account Kit, обратитесь к официальной документации . А чтобы узнать больше о разработке для Android, ознакомьтесь с некоторыми другими нашими статьями здесь на Envato Tuts +!

  • Связь в приложении для Android с EventBus

  • Firebase для Android: Хранение файлов

  • Как создать приложение для Android-чата с помощью Firebase

  • Функциональные приложения для Android в Котлине: Lambdas, Null Safety и многое другое