0

omn​​iauth を使用する Rails アプリケーションが 1 つあります。また、トークンをデータベースに保存します。認証プロセスが完了した後、jQuery を使用して omniauth プロバイダーからデータを取得したいのですが、jQuery スクリプトで @current_user.token などを使用するにはどうすればよいですか?

4

3 に答える 3

1

Rails 3では、js.erbテンプレートファイルを使用して、jQueryで変数を簡単に使用することをお勧めします。jsリクエストに応答するようにコントローラーを設定してから、そのURLにリクエストを送信すると、レンダリングされたjs.erbがブラウザーでjavascriptとして実行され、コントローラーアクションによって設定された変数を利用できます。

コントローラは次のようになります。

class Users < ApplicationController
  respond_to :js, :only => :me
  def me
    @current_user = User.find(session[:user])
    respond_with(@current_user)
  end
end

次に、me.js.erbに次のように記述します

$('#current_user_token').html("<%= escape_javascript(@current_user.token) %>");

URLに.jsを追加することで、アクションを直接呼び出すことができます。

http://0.0.0.0:3000/users/me.js

テンプレートから:remote => trueオプションを追加して、リモートフォームまたはリンクを使用するだけです

link_to "Show user token", me_users_path, :remote => true

me.js.erbファイルは他のJSファイルと同じように機能し、必要な数のJSをそこに含めることができます。変数またはヘルパーを使用する場合は常にERBタグを使用しますが、escape_javascriptヘルパー "<%= escape_javascript(render @current_user)%>"でラップするようにしてください。

js.erbテンプレートをレンダリングせずに変数をリクエストするには、eggie5の提案を使用して、:jsonに応答するアクションに対してajaxリクエストを行います。@current_userをjsonオブジェクトとして返します。

于 2011-03-17T08:32:16.523 に答える
1

jquery はブラウザー コンテキストでのみ実行されるため、サーバー上のデータベースに直接クエリを実行することはできません。

クライアント上のデータベースから何らかの値にアクセスしたい場合。サーバーエンドポイントへのAJAX呼び出しを行うか、値(JSONとして可能)をページに書き込み、jqueryセレクターを使用して取得することをお勧めします。$('server_value')......

于 2011-03-17T04:46:10.893 に答える
0

AJAX経由でJSONを取得するというeggie5のアイデアは良いです...別のオプションは、トークンをCookieに入れて、JavaScript経由で常にアクセスできるようにすることです.

コントローラ

class SomeController
  def some_action
    cookies[:user_token] = current_user.token
  end
end

js

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

var token = readCookie('user_token');
于 2011-03-17T22:17:36.477 に答える