を反応させます。私の認証プロバイダはAWS cognito
です。私はそれとやり取りするコグニティブヘルパーモジュールを書いた。アポロクライアント2.0 graphqlは、私はアポロ/ graphqlに新たなんだと私は私の認証はグリーンフィールドプロジェクト内で適切に行わ取得しようとしている認証
私は私の認証状態で私のアポロクライアントを同期するかどうかはかなりよく分からないけど。今私はちょうど私のコンポーネントハンドラを反応させ、それらを呼び出すことにより、ログイン情報を処理するために、これらの機能を使用してい
export const authenticate = (username: string, password: string) => {
const authDetails = new AuthenticationDetails({
Username: username,
Password: password,
})
const cognitoUser = getCognitoUser(username)
return new Promise((resolve, reject) => {
cognitoUser.authenticateUser(authDetails, {
onSuccess: result => {
resolve(result)
},
onFailure: err => {
reject(err)
},
})
})
}
export const getCurrentUserToken =() => {
return new Promise((resolve, reject) => {
const currentUser = userPool.getCurrentUser()
if (currentUser) {
currentUser.getSession((error, session) => {
if (error) {
reject(error)
}
resolve(session.getIdToken().getJwtToken())
})
} else {
resolve(null)
}
})
}
export const logout =() => {
const currentUser = userPool.getCurrentUser()
if (currentUser) {
currentUser.signOut()
}
}
。 authヘッダーを追加するためのアポロリンクを設定しました。私のJWTトークンデータをバックエンドのコンテキストに注入し、バックエンドにcurrentUser
クエリーリゾルバを実装しました。私は
const resolvers = {
RootQuery: {
currentUser: (obj, args, context) =>
context.tokenData
? {
id: context.tokenData.sub,
name: context.tokenData.name,
email: context.tokenData.email,
username: context.tokenData['cognito:username'],
}
: null,
},
}
私はそのcurrentUser
クエリをクエリコンポーネントUserPanel
を得たアプリケーションのレイアウトを反応させます。
const CURRENT_USER_QUERY = gql`
query {
currentUser {
name
}
}
`
export default graphql(CURRENT_USER_QUERY)(UserPanel)
私が今明らかにUserPanelは、私はページのOFCをリロードてる以外のcurrentUser
クエリを更新しないでログインしています。しかし、私も、それらを同期させるための良い解決策を見いだすのに苦労しています。
私は、ローカルにそれを行うと、誰かが中/ログアウト場合は再フェッチするためにこれらを見てapollo-link-stateを使用してgraphql突然変異を経て、私のログインを実装することを考えました。私は、このリンクがその突然変異のリゾルバで非同期のもの(例えば約束)を解決できないように思えるので、これがうまくいけば分かりません。
私が考えていたもう一つの選択肢は、authプロセスをapolloクライアントから完全に切り離して、Observables
というauth pubsubシステムを実装し、認証状態が変更された場合に反応コンポーネントがクエリを再取得するようにすることでした。
私が継続すると私は考えているすべてのソリューションを行くための推奨される方法のように感じることはありませんどのように非常に不確かです。
あなたは何をしましたか? –