Рубрики
Без рубрики

Социальный логин и аутентификация в Adonis JS

В этом руководстве мы будем проходить через аутентификацию пользователя в узле JS специально ADONIS JS. Мы… Помечено JavaScript, учебник, начинающие, узел.

В этом руководстве мы будем проходить через аутентификацию пользователя в узле JS специально ADONIS JS. Мы будем использовать методы социальных методов входа в систему: Войдите в систему с Facebook, Google и GitHub, используя пакет Adonis JS, называемый союзником.

Давайте попадаем в это.

Я предполагаю, что у вас есть проект Adonis, уже созданный Adonis Project для хранения информации, нам понадобится установить следующие пакеты: • Союзник • Auth Aully – это инструмент социального входа в систему для Adonis JS, он должен быть установлен и настроен отдельно.

Запустите следующие команды для установки и настройки союзника:

npm i @adonisjs/ally

node ace configure @adonisjs/ally.

Вам придется обновить свой «ClientID», «CLIENSECRET» и «CALLBACKURL» в файле конфигурации, сохраненного в каталоге CONFIG/ALLY.TS. CLINGIDID и CLIENSECRET составляются с какой платформы, которую вы выбираете использовать IE Facebook, Google, GitHub, в то время как Callbackurl является URL-адресом, который вы определите, чтобы обработать ответ, полученный от провайдера. Для этого учебника я буду использовать Poogle Provider.

Шаг 1: Сделайте пользовательскую модель и миграцию. Использование команды CLI:

Узел ACE делает: Model User -m

Флаг «-M» создает миграцию вместе с моделью. Добавьте другие поля, которые вы хотите хранить на столе.

Пользовательский файл миграции:

import BaseSchema from '@ioc:Adonis/Lucid/Schema'

export default class Users extends BaseSchema {
  protected tableName = 'users'

  public async up () {
    this.schema.createTable(this.tableName, (table) => {
      table.increments('id');
      table.string('name').notNullable();
      table.string('avatar_url');
      table.string('email').notNullable();
      table.string('provider');
      table.string('provider_id');


      /**
       * Uses timestamptz for PostgreSQL and DATETIME2 for MSSQL
       */
      table.timestamp('created_at', { useTz: true })
      table.timestamp('updated_at', { useTz: true })
    })
  }

  public async down () {
    this.schema.dropTable(this.tableName)
  }
}

Это довольно самоочешивающее, мы создаем таблицу с столбцом: • ID: Auto Usenting Counter для рядов • Имя: имя пользователя, которое мы получим от провайдера • Avatar_URL: URL-адрес профиля пользователя, сохраненный как Строка • Электронная почта: по электронной почте. пользователь. Модель пользователя:

import { DateTime } from 'luxon'
import { BaseModel, column } from '@ioc:Adonis/Lucid/Orm'

export default class User extends BaseModel {
  @column()
  public id: number

  @column()
  public name: string;

  @column()
  public avatar_url: string;

  @column({isPrimary: true})
  public email: string;

  @column()   
  public providerId: string;

  @column()
  public provider: string;

  @column.dateTime({ autoCreate: true })
  public createdAt: DateTime

  @column.dateTime({ autoCreate: true, autoUpdate: true })
  public updatedAt: DateTime
}

Обратите внимание, что содержание вашей модели всегда должно соответствовать вашей миграции.

Шаг 2: Создать контроллер регистрации. Используйте команду CLI: Узел ACE Make Make Make GoogleSignup в файле будет создан в каталоге приложений/контроллеров. Вставьте следующий код в файл:

import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
import User from 'App/Models/User';

export default class GoogleSignInsController {
    public async redirect({ally}: HttpContextContract) {
        return ally.use('google').redirect() 
    }

}

Мы создаем метод, который перенаправляет пользователя на веб-сайт поставщиков ОАУТ для аутентификации.

Шаг 3: Образование обратного вызова вставьте следующий код в том же файле, он включает в себя метод, созданный выше.

import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
import User from 'App/Models/User';

export default class GoogleSignInsController {
    public async redirect({ally}: HttpContextContract) {
        return ally.use('google').redirect() 
    }

    public async handleCallback ({ally, auth, response}: HttpContextContract) {
        const googleUser = ally.use('google');

        /**
         * User has explicitly denied the login request
         */
        if (googleUser.accessDenied()) {
            return 'Access was denied'
        }

        /**
         * Unable to verify the CSRF state
         */
        if (googleUser.stateMisMatch()) {
            return 'Request expired. try again'
        }

        /**
         * There was an unknown error during the redirect
         */
        if (googleUser.hasError()) {
            return googleUser.getError()
        }

        /**
         * Finally, access the user
         */
        const user = await googleUser.user();

        const findUser = {
            email: user.email as string
        }

        const userDetails = {
            name: user.name as string,
            email: user.email as string,
            avatar_url: user.avatarUrl as string,
            provider_id: user.id as string,
            provider: 'google'
        } 

        const newUser =await User.firstOrCreate(findUser, userDetails);

        await auth.use('web').login(newUser)
        response.status(200);

        return newUser;
    }

}

Здесь мы обрабатываем все случаи использования, если вход не удался, прежде чем хранить пользователь в базе данных

const user = await googleUser.user(); //stores the user information object gotten back from google
 const newUser =await User.firstOrCreate(findUser, userDetails);

Здесь мы впервые запрашиваем базу данных, используя электронную почту пользователя, который хранится в объекте Finduser, если электронное письмо существует в базе данных, вернуть первый пользователь, в противном случае создайте новый пользователь с объектом userDetails.

await auth.use('web').login(newUser)

Выше мы используем встроенные в пакете Adonis Auth Auth для регистрации пользователя и создания сеанса.

Шаг 3: Прикрепите контроллеры до маршрута в файле маршрутов, мы создадим маршрут для вызова и инициализации поставщика OAUTH и другого маршрута для обработки обратного вызова

// SIGN IN ROUTES
Route.get('/google-signin', 'GoogleSignInsController.redirect');

//OAuth CALLBACK
Route.get('/google-signin-callback', 'GoogleSignInsController.handleCallback');

Обратите внимание, что приведенный выше маршрут будет введен маршрут, который вы вводите в качестве вашего Callbackurl в файле конфигурации союзника.

Оригинал: “https://dev.to/slickdev_raphael/social-login-and-authentication-in-adonis-js-93a”