{"id":1098,"date":"2015-08-03T14:26:15","date_gmt":"2015-08-03T14:26:15","guid":{"rendered":"http:\/\/www.honobono-life.info\/wpeng\/?p=1098"},"modified":"2015-08-03T14:29:34","modified_gmt":"2015-08-03T14:29:34","slug":"user-log-in-session-with-angularjs","status":"publish","type":"post","link":"http:\/\/www.honobono-life.info\/wpeng\/user-log-in-session-with-angularjs\/","title":{"rendered":"Ruby on Rails Tutorial user log in, session with AngularJS"},"content":{"rendered":"<p><strong>(1)remembering users&#39;sessions<\/strong><\/p>\r\n\r\n<p><strong>1)add a column to User model<\/strong><\/p>\r\n\r\n<p><strong>1.generate a migration<\/strong><\/p>\r\n\r\n<p>$ rails generate migration add_remember_token_to_users<\/p>\r\n\r\n<p><strong>2.add &quot;remember_token&quot; column<\/strong><\/p>\r\n\r\n<p>$ vi db\/migrate\/&#8230;_add_remember_token_to_users.rb<\/p>\r\n\r\n<pre class=\"prettyprint\">\r\nclass AddRememberTokenToUsers &lt; ActiveRecord::Migration\r\n  def change\r\n    add_column :users, :remember_token, :string\r\n    add_index  :users, :remember_token\r\n  end\r\nend<\/pre>\r\n\r\n<p><strong>3.migration<\/strong><\/p>\r\n\r\n<p>$ bundle exec rake db:migrate<\/p>\r\n\r\n<p><strong>2)Adding a method for generating tokens<\/strong><\/p>\r\n\r\n<p>$ vi app\/models\/user.rb<\/p>\r\n\r\n<pre class=\"prettyprint\">\r\nclass User &lt; ActiveRecord::Base\r\n.......\r\n  before_create :create_remember_token\r\n.......\r\n  def User.new_remember_token\r\n    SecureRandom.urlsafe_base64\r\n  end\r\n\r\n  def User.encrypt(token)\r\n    Digest::SHA1.hexdigest(token.to_s)\r\n  end\r\n\r\n  private\r\n    def create_remember_token\r\n      self.remember_token = User.encrypt(User.new_remember_token)\r\n    end\r\nend<\/pre>\r\n\r\n<p><strong>3)Rails &quot;sessions&quot; controller<\/strong><\/p>\r\n\r\n<p>$ vi app\/controllers\/sessions_controller.rb<\/p>\r\n\r\n<pre class=\"prettyprint\">\r\n  def create\r\n    user = User.find_by(email: session_params[:email].downcase)\r\n    if user &amp;&amp; user.authenticate(session_params[:password])\r\n      remember_token = User.new_remember_token\r\n      cookies.permanent[:remember_token] = remember_token\r\n      user.update_attribute(:remember_token, User.encrypt(remember_token))\r\n      @user_info = {\r\n        user: user\r\n      }\r\n      render json: @user_info, status: :accepted, location: user\r\n    else\r\n      msg = {&quot;password&quot; =&gt; [&quot;Invalid email\/password combination&quot;]}\r\n      render json: msg, status: :unprocessable_entity\r\n    end\r\n  end\r\n\r\nprivate\r\n  def session_params\r\n    params.permit(:email,:password)\r\n  end<\/pre>\r\n\r\n<p><strong>4)AngularJS controller<\/strong><\/p>\r\n\r\n<p>$ vi app\/assets\/javascripts\/mymodule.js.erb<\/p>\r\n\r\n<pre class=\"prettyprint\">\r\nmyModule.controller(&quot;SessionsNewCtrl&quot;, function($scope, sessionResource, $location) {\r\n  $scope.submit = function() {\r\n    function success(response) {\r\n      $location.path(&quot;\/users\/&quot; + response.user.id);\r\n    }\r\n    function failure(response) {\r\n........\r\n    }\r\n    sessionResource.create($scope.session, success, failure);\r\n  };\r\n});<\/pre>","protected":false},"excerpt":{"rendered":"<p>(1)remembering users&#39;sessions 1)add a column to User model 1.generate a migration $ rails generate migration add_remember_token_to_users 2.add &quot;remember_token&quot; column $ vi db\/migrate\/&#8230;_add_remember_token_to_users.rb class AddRememberTokenToUsers &lt; 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 &lt; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[137],"tags":[35,145,158,156],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1098"}],"collection":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/comments?post=1098"}],"version-history":[{"count":2,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1098\/revisions"}],"predecessor-version":[{"id":1101,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1098\/revisions\/1101"}],"wp:attachment":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/media?parent=1098"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/categories?post=1098"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/tags?post=1098"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}