在创建帐户时为用户签名

时间:2014-09-26 17:42:36

标签: ruby-on-rails angularjs authentication devise

我正在使用ng-token-auth模块和devise_token_auth宝石。

默认行为似乎是当用户注册时,会向用户发送带有确认链接的电子邮件。我不想要这种行为;我只是希望用户立即登录以下帐户创建,这当然是帐户创建工作的一种非常常见的方式。

我不确定如何实现这一点,我甚至不知道该问什么。在能提供一些见解之前,有没有人碰巧使用过这些库?

2 个答案:

答案 0 :(得分:2)

杰森,你的回答大多是正确的。您还需要指示服务器绕过电子邮件确认步骤。如果尚未完成此操作,则用户将无法登录,直到访问了确认电子邮件中的链接为止。以下是完整的说明:

1。绕过电子邮件确认服务器端

假设模型名为User,请将skip_confirmation!方法作为预创建回调运行。这实际上只是将用户的confirmed_at值设置为当前时间,但该步骤是绕过电子邮件确认所必需的。

class User < ActiveRecord::Base
  include DeviseTokenAuth::Concerns::User
  before_create :skip_confirmation!
end

2。注册成功后立即登录

假设html表单如下所示:

<form ng-submit="submitRegistration(registrationForm)" role="form" ng-init="registrationForm = {}">
  <fieldset>
    <div>
      <label>email</label>
      <input type="email" name="email" ng-model="registrationForm.email" required>
    </div>

    <div class="form-group">
      <label>password</label>
      <input type="password" name="password" ng-model="registrationForm.password" required>
    </div>

    <div class="form-group">
      <label>password confirmation</label>
      <input type="password" name="password_confirmation" ng-model="registrationForm.password_confirmation" required>
    </div>

    <button type="submit">Register</button>
  </fieldset>
</form>

更新 - 自devise_token_auth版本0.1.29.beta2起,如果使用上述before_create :skip_confirmation!回调,则会在注册时自动对用户进行身份验证。所以上面的代码就是必要的。

答案 1 :(得分:0)

好的,我找到了自己问题的答案(natch)。

我将控制器修改为如下所示:

'use strict';

/**
 * @ngdoc function
 * @name lunchHubApp.controller:UserRegistrationsCtrl
 * @description
 * # UserRegistrationsCtrl
 * Controller of the lunchHubApp
 */
angular.module('lunchHubApp')
  .controller('UserRegistrationsCtrl', ['$scope', '$rootScope', '$location', '$auth', function ($scope, $rootScope, $location, $auth) {
    $scope.handleRegBtnClick = function() {
      $auth.submitRegistration($scope.registrationForm)
        .then(function() { 
          $auth.submitLogin({
            email: $scope.registrationForm.email,
            password: $scope.registrationForm.password
          });
        });
    };
  }]);