私は最初のNodeJsアプリケーションを構築し始めました。私はAdonisJsフレームワークを使用しています。ユーザーログインのAdonisJsユーザー認証が失敗する
ユーザーが登録された場所から簡単なユーザー登録ページを作成しました。その後、そのユーザーをログインさせるログインページに行くと、request.auth.attempt(email, password)
メソッドは既存のユーザーを認証しません。
のconfig/auth.js
authenticator: 'session',
/*
|--------------------------------------------------------------------------
| Session Authenticator
|--------------------------------------------------------------------------
|
| Session authenticator will make use of sessions to maintain the login
| state for a given user.
|
*/
session: {
serializer: 'Lucid',
model: 'App/Model/User',
scheme: 'session',
uid: 'email',
password: 'password'
},
routes.js
const Route = use('Route')
// Register
Route.get('register', 'AuthController.showRegisterPage')
Route.post('register', 'AuthController.register')
// Login
Route.get('login', 'AuthController.showLoginPage')
Route.post('login', 'AuthController.login')
// Logout
Route.get('logout', 'AuthController.logout')
AuthController.js//
/**
* Handle user registration
*/
* register(request, response) {
// validate form input
const rules = {
name: 'required',
username: 'required|unique:users',
email: 'required|email|unique:users',
password: 'required|confirmed|min:6'
}
const messages = {
'name.required': 'Name field is required.',
'username.required': 'Username field is required.',
'username.unique': 'Username field must have a unique value.',
'email.required': 'Email field is required.',
'email.unique': 'Email field must have a unique value.',
'password.required': 'Password field is required.',
'password.confirmed': 'Password/Confirm Password fields does not match.'
}
const validation = yield Validator.validateAll(request.all(), rules, messages)
// show error messages upon validation fail
if (validation.fails()) {
yield request
.withAll()
.andWith({ errors: validation.messages() })
.flash()
return response.redirect('back')
}
const user = new User()
user.name = request.input('name')
user.username = request.input('username')
user.email = request.input('email')
user.password = yield Hash.make(request.input('password'))
yield user.save()
yield response.sendView('auth.register', {message: {type: 'success', text: 'Registration successful. You can login now.'} })
}
AuthController.jsを登録:ここでは私がこれまでにコード化されてきたものですログイン
/**
* Handle user authentication
*/
* login(request, response) {
const email = request.input('email')
const password = request.input('password')
// validate form input
const rules = {
email: 'required|email',
password: 'required'
}
const messages = {
'email.required': 'Email field is required.',
'password.required': 'Password field is required.'
}
const validation = yield Validator.validateAll(request.all(), rules, messages)
// show error messages upon validation fail
if (validation.fails()) {
yield request
.withAll()
.andWith({ errors: validation.messages() })
.flash()
return response.redirect('back')
}
try {
yield request.auth.attempt(email, password)
response.route('/')
} catch (e) {
yield response.sendView('auth.login', {message: {type: 'error', text: 'Invalid credentials. Please try again.'} })
}
}
アプリ/モデル/ユーザー
'use strict'
const Lucid = use('Lucid')
const Hash = use('Hash')
class User extends Lucid {
static boot() {
super.boot()
/**
* Hashing password before storing to the
* database.
*/
this.addHook('beforeCreate', function * (next) {
this.password = yield Hash.make(this.password)
yield next
})
}
apiTokens() {
return this.hasMany('App/Model/Token')
}
}
module.exports = User
私がログインしようとするたびに、それは常にログイン方法でcatch
一部を実行します。何が起こっているのか分かりません。誰か助けてください。
あなたは天才です。どうもありがとう :) – Ali