В этом руководстве мы будем проходить через аутентификацию пользователя в узле 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”