2017-09-26 14 views
0

私はMeteorとReactを使って小さなアプリを構築しています。私は外部APIを消費する必要があるため、素晴らしいMeteorアカウントライブラリを使用してユーザー認証を処理しているわけではありません。流星、反応、認証、認可の問題

基本的にMeteorのサーバー側は、APIと通信するためのプロキシとして使用されます。

私は流星からAPIへの認証を作成しました:

Meteor.methods({ 
    'user.authentication': function (email, password) { 
    try { 
     const res = request.postSync(authenticate, { 
     method: 'POST', 
     json: true, 
     body: { 
      email, password 
     } 
     }); 

     if (res.response.statusCode === 200) { 
     return res.body; 
     } 

     throw new Meteor.Error(res.response.statusCode, res.response.body.error.message); 
    } catch (err) { 
     throw new Meteor.Error(400, err.message); 
    } 
    } 
}); 

これは正常に動作している...ログインするコンポーネントは、私は、「保存」するために何をしようとしている成功したデータを送信および受信しますユーザセッションは、流星セッションを使用している:

Login.js:

onSubmit(e) { 
    e.preventDefault(); 

    const email = this.refs.email.value.trim(); 
    const password = this.refs.password.value.trim(); 

    Meteor.call('user.authentication', email, password, (error, res) => { 
    if (error) { 
     console.error(error.reason); 
    } else { 
     Session.set({ 
     user_id: res.response.user_id, 
     token: res.response.token 
     }); 
     history.push('/account'); 
    } 
    }); 

}

残念ながらセッションの値が正しく保存されていないため、認証済みまたは認証されていないユーザーを正しいページにリダイレクトするコントロールを作成できません...

私のアプローチが正しいかどうかわかりません。私が間違ってやっていることを知りたいのであれば、それを処理するためのより良い解決策があるかどうかを知りたい。

たとえば、トークンとuser_idをクライアントに保存するのは好きではありません。Meteorのようにサーバー側を保存したいと思っています。ユーザーコレクションのために、毎回トークンを渡さずにすべてのAPIリクエストを処理できます。 。

答えて

1

残念ながら、私はセッション値が正しく保存されて表示されていないので、私は

流星セッションrequires a key-value pair ...認証済みまたは認証されていないユーザーに正しいページへ をリダイレクトするためのコントロールを作成することはできません。

そこであなたは、むしろ試みることがあります。

Session.set("userAuth",{ 
    user_id: res.response.user_id, 
    token: res.response.token 
}); 

または

Session.set("userId", res.response.user_id); 
Session.set("userToken",res.response.token); 

例えば、私はクライアントにトークンとUSER_IDを保存するために好きではない、私 はそれを保存したいと思いますMeteorのようなサーバー側では、自分のユーザーのために コレクションを行い、毎回 トークンを渡さずにすべてのAPI要求を処理できるようになります...

実際には、ブラウザのlocalStorageを使用して、成功したログイン後のユーザートークンをクライアントに保存します。

アカウントを使用してMeteorアプリでログインし、ローカルストレージを確認してください;-)

関連する問題