# hapi-login-example-postgres **Repository Path**: mirrors_dwyl/hapi-login-example-postgres ## Basic Information - **Project Name**: hapi-login-example-postgres - **Description**: :rabbit: A simple registration + login form example using hapi-register, hapi-login & hapi-auth-jwt2 with a PostgreSQL DB - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-08 - **Last Updated**: 2026-01-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Hapi Register + Login Example (*using*) PostgreSQL A login form using hapi-auth-register, hapi-auth-login & hapi-auth-jwt2 with a PostgreSQL DB [![Build Status](https://travis-ci.org/dwyl/hapi-login-example-postgres.svg?branch=master)](https://travis-ci.org/dwyl/hapi-login-example-postgres) [![codecov.io](https://codecov.io/github/dwyl/hapi-login-example-postgres/coverage.svg?branch=master)](http://codecov.io/github/dwyl/hapi-login-example-postgres?branch=master) [![Code Climate](https://codeclimate.com/github/dwyl/hapi-login-example-postgres/badges/gpa.svg)](https://codeclimate.com/github/dwyl/hapi-login-example-postgres) [![Dependency Status](https://david-dm.org/dwyl/hapi-login-example-postgres.svg)](https://david-dm.org/dwyl/hapi-login-example-postgres) [![devDependencies Status](https://david-dm.org/dwyl/hapi-login-example-postgres/dev-status.svg)](https://david-dm.org/dwyl/hapi-login-example-postgres?type=dev) [![HitCount](https://hits.dwyl.com/dwyl/hapi-login-example-postgres.svg?style=flat-square)](https://hits.dwyl.com/dwyl/hapi-login-example-postgres) ## Why? We did not *find* an ***end-to-end*** solution/tutorial for ***login*** (*using email & password*) in Hapi.js apps, so we *wrote* it. By [***popular demand***](https://github.com/dwyl/hapi-register/issues/7#issuecomment-191713445) this example *focusses* on ***PostgreSQL***, but it can *easily* be adapted to work with *any* backed/database. If ***anything*** is ***unclear*** in this (*or any of our other repos*), ***please tell us***: [![Join the chat at https://gitter.im/dwyl/chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/dwyl/chat/) ## What? This repo is a *showcase* for how to build a login flow using Hapi.js. We use the following plugins: + [**hapi-register**](https://github.com/dwyl/hapi-register) + [**hapi-login**](https://github.com/dwyl/hapi-login) + [**hapi-postgres-connection**](https://github.com/dwyl/hapi-postgres-connection) + [**hapi-auth-jwt2**](https://github.com/dwyl/hapi-auth-jwt2) Each one is *hand-crafted*, *tested* and *maintained* by [*us*](https://github.com/dwyl), feel free to use the code how ever you see fit. > Note: If you have requests/suggestions for how to *extend* this example, [*please let us know!*](https://github.com/dwyl/hapi-login-example-postgres) ### Highlights: + ALL values inserted into the database are *escaped* using [`pg-escape`](https://github.com/segmentio/pg-escape) (*made by [@TJ](https://github.com/tj) & Co ... so you know its good*) + We use [`Joi`](https://github.com/hapijs/joi) for validation - which we display in the client UI. (*see screenshots below*) ## Try it: https://hapi-login.herokuapp.com/ ![login form](https://cloud.githubusercontent.com/assets/194400/10523082/6e7fab3c-7370-11e5-91e2-639fc725b3e6.png) ## How? The best way to get started is to run this example *locally*. > Please ***ensure*** you have ***PostgreSQL Installed and Running*** on your local machine ***before*** you attempt to run this example. > see: https://wiki.postgresql.org/wiki/Detailed_installation_guides #### 1. Clone the repo: ```sh git clone https://github.com/dwyl/hapi-login-example-postgres.git cd hapi-login-example-postgres ``` #### 2. Install *Dependencies* from NPM ```sh npm install ``` #### 3. Ensure you have the Required Environment Variables create an `.env` file in your `hapi-login-example-postgres` directory. add a line for your `DATABASE_URL` variable and one for `JWT_SECRET`: e.g: ```sh export DATABASE_URL=postgres://postgres:@localhost/test export JWT_SECRET=https://git.io/vaN7A ``` > default on mac is: export DATABASE_URL=postgres://postgres:@localhost/test > if you don't *already* have a database called `test` on your system, > create it now by running this command in your psql/pgadmin: `CREATE DATABASE test;` #### 4. Run the Tests ```sh npm test ``` **Note**: running `npm test` will first execute `npm run create` which creates the necessary Database Tables to run the app. see: [/test/database_setup.sql](https://github.com/dwyl/hapi-login-example-postgres/blob/master/test/database_setup.sql) #### 5. Run the Server ```sh npm run dev ``` That's it. Now, ~~hack~~ *customise* it to your heart's content! ### Demo Screenshots When you visit http://localhost:8000/ you will see a login form, you can login with any valid email address: ![hapi-login-01](https://cloud.githubusercontent.com/assets/194400/10522464/312648ca-736d-11e5-9f9f-36e39755b186.png) Make sure the email address is valid: ![hapi-login-03](https://cloud.githubusercontent.com/assets/194400/10522488/47a24568-736d-11e5-8f3b-47a08699b09a.png) Your password needs to be more than 6 characters long: ![hapi-login-05](https://cloud.githubusercontent.com/assets/194400/10522520/78b44052-736d-11e5-919f-903270075795.png) We also use https://github.com/chriso/validator.js to mitigate [Cross Site Scripting](https://en.wikipedia.org/wiki/Cross-site_scripting) vulnerability: Avoids Cross Site Scripting: ![hapi login avoids XSS](https://cloud.githubusercontent.com/assets/194400/10522594/db57b45a-736d-11e5-969a-844d186db80b.png) ## Want *More*? If you would like to see this example *expanded*, please either [***create an issue***](https://github.com/dwyl/hapi-login-example-postgres/issues) with a *specific request* or [![Join the chat at https://gitter.im/dwyl/chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/dwyl/chat/)