(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); }; });