Web Programming examples

Google Maps,AngularJS

Archives

Ruby on Rails Tutorial user log in, session with AngularJS

(1)remembering users'sessions

1)add a column to User model

1.generate a migration

$ rails generate migration add_remember_token_to_users

2.add "remember_token" column

$ vi db/migrate/…_add_remember_token_to_users.rb

class AddRememberTokenToUsers < ActiveRecord::Migration
  def change
    add_column :users, :remember_token, :string
    add_index  :users, :remember_token
  end
end

3.migration

$ bundle exec rake db:migrate

2)Adding a method for generating tokens

$ vi app/models/user.rb

class User < ActiveRecord::Base
.......
  before_create :create_remember_token
.......
  def User.new_remember_token
    SecureRandom.urlsafe_base64
  end

  def User.encrypt(token)
    Digest::SHA1.hexdigest(token.to_s)
  end

  private
    def create_remember_token
      self.remember_token = User.encrypt(User.new_remember_token)
    end
end

3)Rails "sessions" controller

$ vi app/controllers/sessions_controller.rb

  def create
    user = User.find_by(email: session_params[:email].downcase)
    if user && user.authenticate(session_params[:password])
      remember_token = User.new_remember_token
      cookies.permanent[:remember_token] = remember_token
      user.update_attribute(:remember_token, User.encrypt(remember_token))
      @user_info = {
        user: user
      }
      render json: @user_info, status: :accepted, location: user
    else
      msg = {"password" => ["Invalid email/password combination"]}
      render json: msg, status: :unprocessable_entity
    end
  end

private
  def session_params
    params.permit(:email,:password)
  end

4)AngularJS controller

$ vi app/assets/javascripts/mymodule.js.erb

myModule.controller("SessionsNewCtrl", function($scope, sessionResource, $location) {
  $scope.submit = function() {
    function success(response) {
      $location.path("/users/" + response.user.id);
    }
    function failure(response) {
........
    }
    sessionResource.create($scope.session, success, failure);
  };
});