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