2017-09-20 9 views
0

私はルビーオンレールが新しく、私はcancancaやdeviseのような宝石を使っていません。ユーザがログアウトしなかった場合、プロフィールページにユーザをリダイレクト

ユーザーがログインしているが、ログアウトしていないか、ブラウザを閉じていないとします。このユーザーがログアウトしていないときは、ログインページを表示してアクセスできるという問題があります。私は彼がこのページにいるときに彼をどこかにリダイレクトしたい。ログイン状況を確認する機能があります。

def authenticate_user! 
if logged_in? 

else 
    redirect_to root_path, :notice => '' 
end 
end 


class UsersController < ApplicationController 
before_action :authenticate_user! 

これらの2つのことは、ユーザーがログインしていない場合、ルートページに誘導されることを保証します。私が入れようとしていた

def authenticate_user! 
if logged_in? 
redirect_to current_user 
else 
redirect_to root_path, :notice => '' 
end 
end 

レールが私に投げていると、彼はユーザーを知らなかったと不平を言った。しかし、同じヘルパーでcurrent_userも定義しました。

def current_user 
    @current_user ||= User.find_by(id: session[:user_id]) 
    end 

誰かが助けますか?ありがとうございました

更新: 問題が解決しました: 私は私のケースで2つのコントローラを持っているので、ルートで永遠のループを避けるために、私は関数を分けました。ログインしていないことを確認し、ユーザコントローラのルートを設定します。ログインしていない場合、ページはログインコントローラに移動します。ログインしている場合、コントローラとルートにログにログインチェック。

def authenticate_user! 
if !logged_in? 
    redirect_to root_path, :notice => '' 
end 
end 

def authenticate! 
if logged_in? 
    redirect_to current_user 
end 
end 

答えて

0

あなたが正しく設定あなたUsersコントローラとビューを持っている場合、あなたはredirect_to user_pathにできるはずです。

特定のパスがわからない場合は、端末にrake routesと入力すると、既知のすべてのルートのリストが表示されます。次に、 'Prefix'の最後に_routeまたは_urlを追加するだけです。複数形に細心の注意を払う

+0

ページが正しくリダイレ​​クトされていないため、レールが私に与えるものです。私のURLは、ユーザー/ 16にいると指定していますが、どういうわけか私は直接それを得る権限がありません。 – user3431800

+0

あなたのコントローラにユーザーショーアクションがありますか?あなたのルートは正しく設定されていますか?コードを投稿した場合、私たちはそれを見ることができます – Andy

+0

私はかなり私のルートが正しいと確信しています。リソース:ユーザーはすべてのルートを実行するためにレールによって使用されます。もし私がその行を下に置くと、ユーザーはログインページにまだアクセスできます。 – user3431800

関連する問題