私はMeteorアプリケーションで反応ルータを使用してalanning Meteor-rolesを実装しようとしています。私は私のルート上にonEnter={requireVerified}
を使用しようとしていますアクセスを制限する(Meteor + React Router + Roles)
:すべては、私は流星-役割を試してみましたalanning役割やMeteor.user()
を使用してルートを制限するために、適切に管理することはできませんという事実を除いて正常に動作しています。これはコードです:
const requireVerified = (nextState, replace) => {
if (!Roles.userIsInRole(Meteor.userId(), ['verified'],'user_default')) {
replace({
pathname: '/account/verify',
state: { nextPathname: nextState.location.pathname },
});
}
};
I)は、(Meteor.userで試してみました:
const requireVerified = (nextState, replace) => {
if (!Meteor.user().isverified == true) {
replace({
pathname: '/account/verify',
state: { nextPathname: nextState.location.pathname },
});
}
};
私は経路リンクをクリックしていたときにこれが働いている、しかし、私は手動で更新すると(F5 )、 それは動作しません。それを掘り下げた後、ページを手動で更新するときにMeteor.user()
が準備ができていないことがわかりました。
私はMeteor.userid()またはMeteor.logginInを(知っている)が働いているが、私だけではなく、彼らが記録されていることが、彼らは「検証済み」または が役割を持っているかどうかを確認するために を望んでいました。
どちらの場合も、それは同じだ、componentDidMount()
またはcomponentWillMount()
と、反応する私はまたしてコンポーネントの中身をチェックしてみましたcompenentがマウントされる前に、手動で新鮮はMeteor.user()
ロードされません。
だから、流星/羽目板の役割+反応ルータでコンポーネント/ルートを制限する最良の方法は何ですか? (私はTheMeteorChefのベースの内側に反応したコンポーザーを使用しています)
ありがとう。私はまだ試していません
idこの「検証者」の要件は、電子メールの検証に関係する方法ですか? – Ankit
いいえ、私は外部API呼び出し(このアプリケーションはサードパーティプロバイダと連携しています)でアカウントを確認しています。この例では、ユーザーオブジェクトがどのように構築されたかを正確には示していませんが、外部Webisteで検証が完了したら、コールバックを使用して流星のユーザーオブジェクトを更新し、データベースにisverified = trueを追加します流星によって提供される) – NOaMTL
@NOaMTLあなたは解決策を見つけましたか?私は同じ問題を抱えています... – cocacrave