2016-02-14 127 views
1

我有一個設計用戶模型,我需要一個特殊的行爲。代表他人設計註冊用戶(發送註冊郵件)

每個用戶都屬於一家公司,我希望另一家公司用戶'註冊'一個新用戶。

我首先想到的是使用設計的自我:創建一個新的RegistrationsController動作

def new_company_user 
    build_resource(company_id: params[:company_id]) 
    # ... 
end 

那麼該視圖指向標準Devise::RegistrationsController#create

然後,我遇到了一個問題:就是圖謀需要新註冊用戶未登錄。

所以,可能有另一種方法。

如果我自己創建用戶,我如何觸發Devise向新創建的用戶發送註冊電子郵件?

PS。我也考慮過邀請策略插件,但決定不使用它,因爲我希望這兩種方式都可以工作:1.手動註冊,然後「同事」註冊。我可能在這裏錯過了一些東西?

任何意見讚賞。

回答

1

我會爲這種情況做一個自定義操作,我會發送company_idemail,併爲新用戶分配一個隨機生成的密碼。

接下來,用戶保存後,我會使用devise中的send_confirmation_instructions方法。

require 'securerandom' 

def custom_action 
    user = User.new(user_params) 
    user.password = SecureRandom.hex #5b5cd0da3121fc53b4bc84d0c8af2e81 
    if user.save 
    user.send_confirmation_instructions 
    else 
    # redirect or.. 
    end 
end 

用戶將收到電子郵件確認他的帳戶。 現在,這裏有兩種方法,要麼你會在確認後直接簽署他,你需要以某種方式讓他改變他當前的密碼,要麼他需要通過登錄表單,這需要發送生成的密碼通過確認郵件供用戶使用。然後他將不得不改變他的密碼。 :)

如何在電子郵件中發送臨時密碼或讓用戶更改他的密碼 ?

我想補充一個布爾字段用戶名爲假設generated_password並默認爲false設置它,只有當被其他用戶創建的這個帳戶我將它設置爲true。 在確認電子郵件模板中,我會檢查generated_password是否爲真,並顯示附加信息以及臨時密碼。

此外,如果generated_password爲true,則此字段可用於使控制器中的before_filter將用戶始終重定向到change_password路徑,並在更新密碼時將其設置爲false。

+0

在「現在,這裏有兩種方法,你會唱歌」這是一個錯字。它是「符號」。 – sureshprasanna70

+0

非常感謝@ rmagnum2002。你的策略對我有用。將接受這個答案 –