Add OAuth

This commit is contained in:
2021-05-22 11:28:42 +02:00
parent 66b4709011
commit b4c2b634d4
7 changed files with 177 additions and 4 deletions

View File

@@ -60,4 +60,55 @@ export default class AuthController {
return { user }
}
public async twitter ({ally, auth}: HttpContextContract) {
const twitter = ally.use('twitter')
const twitterUser = await twitter.user()
const user = await User.firstOrCreate({
email: twitterUser.email,
}, {
email: twitterUser.email,
username: twitterUser.name,
isConfirmed: twitterUser.emailVerificationState === 'verified'
})
await auth.use('web').login(user)
return { user }
}
public async github ({ally, auth}: HttpContextContract) {
const github = ally.use('github')
const githubUser = await github.user()
const user = await User.firstOrCreate({
email: githubUser.email,
}, {
email: githubUser.email,
username: githubUser.name,
isConfirmed: githubUser.emailVerificationState === 'verified'
})
await auth.use('web').login(user)
return { user }
}
public async google ({ally, auth}: HttpContextContract) {
const google = ally.use('google')
const googleUser = await google.user()
const user = await User.firstOrCreate({
email: googleUser.email,
}, {
email: googleUser.email,
username: googleUser.name,
isConfirmed: googleUser.emailVerificationState === 'verified'
})
await auth.use('web').login(user)
return { user }
}
}

View File

@@ -0,0 +1,20 @@
import {HttpContextContract} from "@ioc:Adonis/Core/HttpContext";
import GoldenMessage from "../../Models/GoldenMessage";
import StoreValidator from "../../Validators/goldenmessages/StoreValidator";
export default class GoldenMessagesController {
public async index () {
return GoldenMessage.query().orderBy('created_at', 'desc')
}
public async store ({request}: HttpContextContract) {
const data = await request.validate(StoreValidator)
return await GoldenMessage.create(data)
}
public async show ({params}: HttpContextContract) {
return await GoldenMessage.findOrFail(params.id)
}
}

View File

@@ -0,0 +1,24 @@
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
import {rules, schema} from '@ioc:Adonis/Core/Validator'
export default class StoreValidator {
constructor (private ctx: HttpContextContract) {
}
public schema = schema.create({
user_id: schema.number( [
rules.required(),
rules.unique({table: 'golden_messages', column: 'user_id'}),
rules.exists({ table: 'users', column: 'id'})
]),
message: schema.string({}, [
rules.required()
])
})
public cacheKey = this.ctx.routeKey
public messages = {
required: 'Le champ {{field}} doit être valide !',
}
}