1

我想知道在註冊後立即登錄用戶的好方法。我不需要電子郵件確認,所以用戶不應該期望這會自動發生。Rails:註冊後登錄用戶

def create 
    @user = User.new(params[:user]) 

    respond_to do |format| 
     if @user.save 
     format.html { redirect_to welcome_url, notice: "Your user: #{@user.name} was successfully created! Please log in!" } 
     format.json { render json: @user, status: :created, location: @user } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

的一個問題,我看到的是,我沒有直接連接到POST會話#創建路由。它看起來像我,但沒有具體的路線

controller :sessions do 
    get 'login' => :new 
    post 'login' => :create 
    delete 'logout' => :destroy 
    get 'logout' => :destroy 
end 

產量:

login GET /login(.:format)      sessions#new 
     POST /login(.:format)      sessions#create 
logout DELETE /logout(.:format)      sessions#destroy 
     GET /logout(.:format)      sessions#destroy 

以供參考,這是我的會話#創建方法

def create 
    user = User.find_by_name(params[:name]) 
    if user and user.authenticate(params[:password]) 
    session[:user_id] = user.id 

    if session[:return_to] 
     redirect_to session[:return_to] 
     session[:return_to] = nil 
     return 
    end 
    redirect_to eval("#{user.role}_url") 

    else 
    redirect_to login_url, alert: "Invalid user/password combination" 
    end 
end 

可我只是直接掛接到我的會話#從我的用戶@創建控制器方法創建路由,就好像用戶登錄,除了第一次?

回答

1

您不能使用post方法重定向。見redirect_to using POST in rails。因此,您的選項爲: 1.訪問會話模型並從用戶創建方法創建記錄,或者 2.(不建議)爲會話#login方法創建GET訪問權限。 我希望這可以幫助。

+0

雖然我沒有會話模型,但我依賴於通過會話控制器設置的會話變量,因爲您可以看到...如果從另一個控制器訪問控制器,它會保持RESTful狀態嗎? –

+0

您可能會將通用代碼作爲application_controller中的方法聲明並從兩個控制器中調用它。 – Anil

+0

謝謝你,一個很好的方向 –