0

JavaScript/Ajax (バックボーンを使用) で Devise 認証を実装する Rails/Backbone アプリがあります。ユーザーがログインしたら、devise から app.currentUser に userSession 応答オブジェクトを割り当てて、クライアント側の currentUser を作成します。

app.currentUser = userSession;

ただし、私が currentUser を使用している方法では、その userSession 情報を使用しないため、ブール値を指定することもできます。

次に、アプリの他のメソッド内で、このような現在のユーザーがいるかどうかを確認して承認を確認します

if(!app.currentUser) {
        this.trigger("pleaseSignIn");
        return; 
    }
    else { 
     ....

テストしたところ、これは正常に機能しました。ユーザーがログインしていない場合、アプリの特定の部分に進むことができません。ただし、基本的な JavaScript スキルがあればapp.currentUser = true、コンソールで設定することでログインをバイパスできます。私は私の承認の背後にある国家機密を保護していません。サインアップなどを奨励することを目的としています。私の質問は、現在のユーザーがサーバー側に存在するかどうかを確認せずに、これを少し強化する方法はありますか (つまり、devise はログイン時に現在のユーザー サーバー側を設定します)。

私が検討した 1 つの (弱い) 戦略は、変数にまったく意味のない名前を使用することでした。つまり、誰かが私の多孔性の認証壁をハッキングするために少なくともナンセンスを乗り越えなければならないようにif(!app.currentUser) {言うかもしれません。if(!app.godNotDead)しかし、私はまだもう少し堅牢なものを望んでいます。

アプリの仕組みをもう少し説明する必要があるかもしれません。最初は認証の壁がありません。むしろ、ユーザーはアプリの特定の部分で遊ぶことができます。ログインを求められるのは、アプリの他の部分をクリックしようとしたときだけです。

参考までに、通常のデバイスのセットアップでは、承認はサーバー上の Rails コントローラーでチェックされ、この方法でバイパスすることはできません。

4

1 に答える 1

0

最善の方法は、クライアント側ではなくレールから状態を取得することです

UserModel.fetch()
// returns a user model if there is one, if not then you are obviously not authenticated

または、サーバーへのリクエストでトークンをパラメーターとして使用する方がよいと思います

?token={some hash the server gave you}

単なるブール値ではなく、トークンが必要です

于 2013-02-12T21:39:00.300 に答える