当前位置: 首页 > 知识库问答 >
问题:

使用Vue3 amplify根据AWS cognito对用户进行身份验证

柯清野
2023-03-14

我正在使用vue3,并且已经建立了一个AWS用户池(amazoncognito.com)。目标是根据Cognito使用用户名和密码对用户进行身份验证,并接收OAuth2令牌以验证针对AWSAPI网关发出的API请求。

挑战:AWS amplify似乎不适用于最新的vue3版本。它只显示用户未登录,但未显示任何登录或注销按钮,无论配置如何。

我感兴趣的潜在解决方案(优先顺序)

main.js

import { createApp } from 'vue'
import App from './App.vue'
import Amplify from 'aws-amplify';
import Auth from '@aws-amplify/auth';

Amplify.configure({
  Auth: {
      identityPoolId: 'eu-central-1_REST-OF-ID',
      region: 'eu-central-1',
      userPoolWebClientId: '4t49u0pu0skkREST-OF-ID',
      mandatorySignIn: false,
      cookieStorage: {
            domain: 'PREFIX.auth.eu-central-1.amazoncognito.com',
            path: '/',
            expires: 365,
            sameSite: "lax",
            secure: true
        },
      authenticationFlowType: 'USER_PASSWORD_AUTH',
      oauth: {
          domain: 'PREFIX.auth.eu-central-1.amazoncognito.com',
          scope: ['phone', 'email', 'profile', 'openid', 'aws.cognito.signin.user.admin'],
          redirectSignIn: 'http://localhost:3000/',
          redirectSignOut: 'http://localhost:3000/',
          responseType: 'code' // or 'token', note that REFRESH token will only be generated when the responseType is code
      }
  }
});

import { createStore } from 'vuex'
const store = createStore({
    state() {
      return {
        entries: []
      };
    },
    mutations: {
      addTime(state, item) {
        state.entries.push(item);
      }
    }
});

createApp(App).use(store, Amplify, Auth).mount("#app");
    

和内部App.vue

  <template>
  <img alt="Vue logo" src="./assets/logo.png">
  <HelloWorld msg="Welcome to Your Vue.js App"/>
  <AddTime/>
  <amplify-authenticator>
    <div>
    Inside Authenticator
    <amplify-sign-in></amplify-sign-in>
      <amplify-sign-out></amplify-sign-out>
    </div>
  </amplify-authenticator>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue';
import AddTime from './components/AddTime.vue';

export default {
  name: 'App',
  components: {
    HelloWorld,
    AddTime,
  }
}
</script>
  1. 是否有人能够将AWS amplify身份验证模块与vue3一起使用?
  2. 如何使用vue3访问Cognito OAuth 2.0授权服务器并获取(通过发布用户放置的凭据来验证和接收令牌)

共有2个答案

太叔望
2023-03-14

Vue3现在由放大器支持,但仍处于早期阶段。最大的变化是您不再使用ui-vue包。您需要使用ui组件:

纱线添加aws amplify@aws amplify/ui组件

AWS有一个认证示例供您在他们的网站上使用。确保在示例中选择了Vue3选项卡。我也可以确认这在离子应用程序中对我也有效。

漆雕疏珂
2023-03-14

事实证明,vue3甚至在发布几个月后都不受支持。见:https://github.com/aws-amplify/amplify-js/issues/6756

 类似资料:
  • null 我研究了OAuth2隐式授权,但它要求用户在成功验证后批准/拒绝应用程序。它在我的情况下不起作用,因为我同时拥有应用程序和API。 我查看了OAuth2密码授权,它并不完美,因为我需要公开client_id/client_secret。 我关注OAuth2的原因是因为该API最终将是公开的。 忘记OAuth2,在用户发布用户名/密码时手动生成access_token(在本例中,当API公

  • 这是服务到服务身份验证中概述的规则的一个例外吗?该规则规定需要设置为接收服务的url(例如https://xxxxx.run.app)。和是一回事吗? 最后,除了使用googlecloudsdk(即imaging不存在)之外,是否还有其他方法使用用户帐户而不是服务帐户进行身份验证?

  • 我正在尝试使用urllib3连接到网页。代码如下所示。 如果我们假设url是需要使用用户名和密码进行身份验证的某个网页,那么我是否使用正确的代码进行身份验证? 我使用urllib2做这件事很舒服,但使用urllib3做不到同样的事情。 非常感谢

  • jwt不应该仅仅用于认证用户吗?我读到过可以在里面存储非敏感的东西,比如用户ID。将权限级别之类的东西存储在令牌中可以吗?这样我可以避免数据库调用。

  • 我正在尝试使用connect将passport集成到我的nodejs服务器中,但似乎无法正确完成。所有的指南/示例都使用expressJS,所以我尽了最大努力重新格式化代码以使用我的代码,但我似乎无法让它正常工作。相关部分写在下面。有人对可能出现的问题有什么建议吗?护照authenticate()似乎从未被调用(至少facebook身份验证回调中的console.log消息从未打印)。我目前没有将

  • 我有一个react应用程序在一个单独的端口(localhost:3000)上运行,我想用它来验证用户,目前我的Spring后端(localhost:8080)有一个代理设置。 我能以某种方式手动验证而不是通过发送一个请求到我的后端,并获得一个会话cookie,然后在每个请求中包含cookie吗?这也将简化iOS方面的验证过程(使用此过程,我只能将会话cookie值存储在keychain中,并在每次