Skip to content

i2bskn/passwd

Repository files navigation

Passwd

Gem Version

Passwd is provide hashed password creation and authentication.

Installation

Add this line to your application's Gemfile:

gem "passwd"

And then execute:

$ bundle install

Create config file(Only Rails) with:

$ bundle exec rails generate passwd:install

The following file will be created.
See config if not Rails.

  • config/initializers/passwd.rb

Usage

Ruby

passwd = Passwd.current
passwd.random(10) # Create random password of 10 characters.
password = passwd.password_hashing("secret") # Create hashed password from plain text.
password == "secret" # => true
load_password = passwd.load_password("hashed_password") # Load hashed password.
load_password == "secret"

ActiveRecord with Rails

Add authentication to your User model.
Model name is User by default, but can be changed in configuration file.

class User < ActiveRecord::Base
  with_authenticate
end

Options

User model The following column are required.
Column name can be changed with the specified options.

  • :id => :email Unique value to be used for authentication.
  • :password => :password Column of String to save the hashed password.

Use the name column as id.

class User < ActiveRecord::Base
  with_authenticate id: :name
end

Authenticate

authenticate method is available in both instance and class.
Returns user object if the authentication successful.
Returns nil if authentication fails or doesn't exists user.
Instance method is not required id.

user = User.authenticate(params[:email], params[:password]) # Returns user object or nil.
user.authenticate(params[:password]) # Returns true if authentication succeeded.

set_password method will be set random password.
To specify password as an argument if you want to specify a password.

current_user.set_password("secret") # Set random password if not specified a argument.
current_user.save

new_user = User.new
random_plain_password = new_user.set_password
UserMailer.register(new_user, random_plain_password).deliver!

ActionController

Already several methods is available in your controller.

If you want to authenticate the application.
Unauthorized access is thrown exception.
Can be specified to redirect in configuration file.

class ApplicationController < ActionController::Base
  before_action :require_signin
end

If you want to implement the session management.

class SessionsController < ApplicationController
  # If you has been enabled `require_signin` in ApplicationController
  skip_before_action :require_signin

  # GET /signin
  def new; end

  # POST /signin
  def create
    # Returns nil or user
    @user = User.authenticate(params[:email], params[:password])

    if @user
      # Save user_id to session
      signin(@user)
      redirect_to_referer_or some_path, notice: "Signin was successful. Hello #{current_user.name}"
    else # Authentication fails
      render action: :new
    end
  end

  # DELETE /signout
  def destroy
    # Clear session (Only user_id)
    signout
    redirect_to some_path
  end
end

current_user and signin? method available in controllers and views.

def greet
  name = signin? ? current_user.name : "Guest"
  render text: "Hello #{name}!!"
end

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/i2bskn/passwd.

License

The gem is available as open source under the terms of the MIT License.

About

Passwd is provide hashed password creation and authentication.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published