2013-05-14 29 views
5

Đầu tiên, xin lỗi tiếng anh nghèo của tôi, tôi là người Pháp ... thật khó để giải thích vấn đề của tôi!đưa ra lời mời không xác thực mô hình

Tôi có một mô hình tài mô hình trong một ứng dụng Rails:

class User < ActiveRecord::Base 

    attr_accessible :email, :gender, :lastname, :firstname  

end 

Và một mô hình BackUser mà kế thừa từ tài khoản:

class BackUser < User 
    # Class for Backoffice User 
    devise :database_authenticatable, 
      :rememberable, 
      :trackable, 
      :lockable, 
      :invitable, 
      :confirmable, 
      :validatable, 
      :validate_on_invite => true 

    attr_accessible :password, :password_confirmation, :remember_me, :active, :role 

    validates :role, presence: true, 
        inclusion: ["admin", "normal"] 

    validates :gender, presence: true 

    validates :firstname, presence: true 

    validates :lastname, presence: true 


    def admin? 
    self.role == 'admin' 
    end 

end 

lớp thứ hai này nên xác nhận kỷ lục trước khi mời! NHƯNG, khi tôi sử dụng giao diện điều khiển để làm như sau:

u = BackUser.new 
u.invite! 

"u" được lưu trong cơ sở dữ liệu và một lời mời được gửi đến email trống ...

Bạn có biết những gì tôi phải làm gì?

Rất nhiều!

+0

Bạn đã sử dụng phiên bản nào? Chúng tôi có cùng vấn đề sau khi chúng tôi nâng cấp lên devise_invitable 1.2.1 từ 1.1.8. Vì vậy, có lẽ đây là một sự thay đổi không tương thích ngược? – psmith

Trả lời

12

Tôi chắc chắn bạn đã tìm thấy giải pháp hoặc giải pháp cho vấn đề của mình ngay bây giờ, nhưng đối với bất kỳ người dùng SO nào trong tương lai gặp phải vấn đề tương tự, tôi đã tìm thấy bản sửa lỗi khá đơn giản.

Devise Invitable's model configuration docs không giải thích đầy đủ cách triển khai :validate_on_invite, nhưng bạn phải đặt tùy chọn cấu hình thành true - :validate_on_invite => true.

Đây là cách mà phương pháp của tôi trông giống như trong Mô hình người dùng của tôi để hoạt động chính xác.

mô hình/user.rb

# Include default devise modules. Others available are: 
# :confirmable, :lockable, :timeoutable and :omniauthable 
devise :invitable, :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable, :validate_on_invite => true 

Bây giờ khi tôi cố gắng để nộp mời nó hoàn toàn chứng thực kỷ lục với những gì kiểm chứng thực tôi đã thiết lập trong mô hình tài khoản của tôi trước khi cho phép thông báo mời được gửi và hồ sơ người dùng sẽ được tạo. Nhìn vào các tài liệu, tôi đoán bạn cũng có thể kích hoạt thiết lập này trong bộ tạo khởi tạo, nhưng tôi đã không thử đi tuyến đó.

* tùy chọn thứ hai có thể kích hoạt tính năng xác nhận nếu cần

config/initializers/devise.rb

config.validate_on_invite = true 
+0

Đang thử cả hai tùy chọn này, chưa hoạt động trên Rails 4/Invitable 1.5.5 – emptywalls

-1

Nó không giải quyết những bí ẩn của lý do tại sao hành vi của bạn đang diễn ra, nhưng:

if u.save 
    u.invite! 
end 

sẽ cung cấp cuối cùng là kết quả bạn đang sau.

+1

Thao tác này sẽ không hoạt động vì bạn sẽ gặp lỗi trên mật khẩu. – emptywalls

4

Tôi chưa bao giờ có thể nhận được xác nhận để làm việc một cách chính xác cho devise bất khả xâm phạm. Bạn không thể sử dụng đề xuất của RobHeaton vì bạn sẽ nhận được lỗi xác thực trên mật khẩu. Tôi sử dụng bản hack nhỏ này để xác thực để hoạt động:

def create 
    @user = User.new(user_params) 
    @user.valid? 
    @user.errors.messages.except!(:password) #remove password from errors 
    if (@user.errors.any?) 
     render 'new' 
    else 
     @user.invite!(current_user) 
     redirect_to user_path(@user) 
    end 
    end 
+0

Cùng một thuyền. Các xác nhận hợp lệ cũng không làm việc cho tôi. – emptywalls

+0

Rắc rối lại vấn đề này với ứng dụng Rails 5 và sử dụng giải pháp này vì giải pháp trước của tôi không xuất hiện để hoạt động với Rails 4+. – mkp

Các vấn đề liên quan