2016-10-16 1 views
0

Je travaille avec AdonisJs framework pour développer une page d'authentification pour plusieurs utilisateurs. Cette page devrait permettre aux utilisateurs d'afficher le profil uniquement lorsqu'ils sont authentifiés. Mais Adonis partage maintenant des sessions entre chaque utilisateur connecté à l'application. Ainsi, le profil est activé pour tout le monde une fois que quelqu'un se connecte.AdonisJs Partage de sessions

'use strict' 
 

 
class UserController { 
 

 
    * login (request, response) { 
 
     const email = request.input('email') 
 
     const password = request.input('password') 
 
     const login = yield request.auth.attempt(email, password) 
 

 
     if (login) { 
 
      response.send('Logged In Successfully') 
 
      return 
 
     } 
 

 
     response.unauthorized('Invalid credentails') 
 
    } 
 

 
    * profile (request, response) { 
 
    const user = yield request.auth.getUser() 
 

 
    if (user) { 
 
     response.ok(user) 
 
     return 
 
    } 
 

 
    response.unauthorized('You must login to view your profile') 
 

 
\t } 
 

 
}

Ce qui suit est config pour config/auth.js

'use strict' 
 

 
const Config = use('Config') 
 

 
module.exports = { 
 

 
    /* 
 
    |-------------------------------------------------------------------------- 
 
    | Authenticator 
 
    |-------------------------------------------------------------------------- 
 
    | 
 
    | Authenticator is a combination of HTTP Authentication scheme and the 
 
    | serializer to be used for retrieving users. Below is the default 
 
    | authenticator to be used for every request. 
 
    | 
 
    | Available Schemes - basic, session, jwt, api 
 
    | Available Serializers - Lucid, Database 
 
    | 
 
    */ 
 
    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' 
 
    }, 
 

 
    /* 
 
    |-------------------------------------------------------------------------- 
 
    | Basic Auth Authenticator 
 
    |-------------------------------------------------------------------------- 
 
    | 
 
    | Basic Authentication works on Http Basic auth header. 
 
    | 
 
    */ 
 
    basic: { 
 
    serializer: 'Lucid', 
 
    model: 'App/Model/User', 
 
    scheme: 'basic', 
 
    uid: 'email', 
 
    password: 'password' 
 
    }, 
 

 
    /* 
 
    |-------------------------------------------------------------------------- 
 
    | JWT Authenticator 
 
    |-------------------------------------------------------------------------- 
 
    | 
 
    | Jwt authentication works with a payload sent with every request under 
 
    | Http Authorization header. 
 
    | 
 
    */ 
 
    jwt: { 
 
    serializer: 'Lucid', 
 
    model: 'App/Model/User', 
 
    scheme: 'jwt', 
 
    uid: 'email', 
 
    password: 'password', 
 
    secret: Config.get('app.appKey') 
 
    }, 
 

 
    /* 
 
    |-------------------------------------------------------------------------- 
 
    | API Authenticator 
 
    |-------------------------------------------------------------------------- 
 
    | 
 
    | Api authenticator authenticates are requests based on Authorization 
 
    | header. 
 
    | 
 
    | Make sure to define relationships on User and Token model as defined 
 
    | in documentation 
 
    | 
 
    */ 
 
    api: { 
 
    serializer: 'Lucid', 
 
    model: 'App/Model/Token', 
 
    scheme: 'api' 
 
    } 
 

 
}

Voici config/database.js

'use strict' 
 

 
const Env = use('Env') 
 
const Helpers = use('Helpers') 
 

 
module.exports = { 
 

 
    /* 
 
    |-------------------------------------------------------------------------- 
 
    | Default Connection 
 
    |-------------------------------------------------------------------------- 
 
    | 
 
    | Connection defines the default connection settings to be used while 
 
    | interacting with SQL databases. 
 
    | 
 
    */ 
 
    connection: Env.get('DB_CONNECTION', 'pg'), 
 

 
    /* 
 
    |-------------------------------------------------------------------------- 
 
    | Sqlite 
 
    |-------------------------------------------------------------------------- 
 
    | 
 
    | Sqlite is a flat file database and can be good choice under development 
 
    | environment. 
 
    | 
 
    | npm i --save sqlite3 
 
    | 
 
    */ 
 
    sqlite: { 
 
    client: 'sqlite3', 
 
    connection: { 
 
     filename: Helpers.databasePath('development.sqlite') 
 
    }, 
 
    useNullAsDefault: true 
 
    }, 
 

 
    /* 
 
    |-------------------------------------------------------------------------- 
 
    | MySQL 
 
    |-------------------------------------------------------------------------- 
 
    | 
 
    | Here we define connection settings for MySQL database. 
 
    | 
 
    | npm i --save mysql 
 
    | 
 
    */ 
 
    mysql: { 
 
    client: 'mysql', 
 
    connection: { 
 
     host: Env.get('DB_HOST', 'localhost'), 
 
     user: Env.get('DB_USER', 'root'), 
 
     password: Env.get('DB_PASSWORD', ''), 
 
     database: Env.get('DB_DATABASE', 'adonis') 
 
    } 
 
    }, 
 

 
    /* 
 
    |-------------------------------------------------------------------------- 
 
    | PostgreSQL 
 
    |-------------------------------------------------------------------------- 
 
    | 
 
    | Here we define connection settings for PostgreSQL database. 
 
    | 
 
    | npm i --save pg 
 
    | 
 
    */ 
 
    pg: { 
 
    client: 'pg', 
 
    connection: { 
 
     host: Env.get('DB_HOST', 'localhost'), 
 
     user: Env.get('DB_USER', 'correctuser'), 
 
     password: Env.get('DB_PASSWORD', 'correctpassword'), 
 
     database: Env.get('DB_DATABASE', 'correctdb') 
 
    } 
 
    } 
 

 
}

+0

Je veux juste dire que adonis a l'air legit af .. j'ai l'impression d'abandonner l'express en faveur d'adonis: D – MilkyWayJoe

Répondre

1

Ce fut un bogue dans Adonis vous devez mettre à jour 3.0.3 Adonis à la dernière version (3.0.6 au moment).

+0

Comment mettre à jour adonis? Je cours 'npm i -g adonis-cli' qui installe adonis globalement à la version' 2.1.9' – Ali

+0

simplement en exécutant 'npm update'. BTW, la version 4.0 d'Adonis est disponible maintenant, pensez à la mise à jour: D –