AWS QuickSightrails集成授权代码错误



我有一个rails应用程序,需要添加QuickLight。发现出于这些目的,有必要使用get_dashboard_embed_url方法。这个方法返回URL,但按照它(手动地,通过iframe标记(我会得到以下错误文本
由于URL或授权代码无效,嵌入失败。这两者都必须是有效的,并且授权代码必须不过期才能嵌入
在哪里可以找到身份验证代码?我怎样才能拿到它?谢谢你的帮助
这就是我获取url 的方式

credential_options = {
client: Aws::STS::Client.new(region: ENV['AWS_REGION']),
role_arn: ENV['QUICK_SIGHT_ROLE_ARN'],
role_session_name: self.user_email
}
assume_role_credential = Aws::AssumeRoleCredentials.new(credential_options)
qs_client = Aws::QuickSight::Client.new({
credentials: assume_role_credential,
region: ENV['AWS_REGION']
})
begin
qs_client.register_user({
identity_type: 'IAM', # accepts IAM, QUICKSIGHT
email: self.user_email,
user_role: 'READER', # accepts ADMIN, AUTHOR, READER, RESTRICTED_AUTHOR, RESTRICTED_READER
iam_arn: ENV['QUICK_SIGHT_ROLE_ARN'],
session_name: self.user,
aws_account_id: ENV['AWS_ACCOUNT_ID'],
namespace: 'default'
})
rescue
end
options = {
aws_account_id: ENV['AWS_ACCOUNT_ID'],
dashboard_id: ENV['QUICK_SIGHT_DASHBOARD_ID'],
identity_type: 'IAM',
session_lifetime_in_minutes: 300,
undo_redo_disabled: false,
reset_disabled: false
}
qs_client.get_dashboard_embed_url(options, {}).embed_url

以及我如何尝试显示
iframe src=@url class='w-100 h-100' style='min-height: 500px;'

首先,很抱歉我英语不好,但我希望你能理解我的意思
好的,在完成这些要点之后,一切都开始对我起作用;水下岩石";,这是一个非常重要的要点列表,它将为您节省大量时间

  • 用这个替换我有问题的代码

    def fetch_url # this method fetch embed dashboard url
    credential_options = {
    client: Aws::STS::Client.new(
    region: ENV['AWS_REGION'],
    access_key_id: ENV['AWS_ACCESS_KEY_ID'],
    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
    ),
    role_arn: ENV['QUICK_SIGHT_ROLE_ARN'],
    role_session_name: self.user_email # This is attr_accessor :user_email
    }
    assume_role_credential = Aws::AssumeRoleCredentials.new(credential_options)
    qs_client = Aws::QuickSight::Client.new({
    credentials: assume_role_credential,
    region: ENV['AWS_REGION']
    })
    begin
    qs_client.register_user({
    identity_type: 'IAM', # accepts IAM, QUICKSIGHT
    email: self.user_email,
    user_role: 'READER', # accepts ADMIN, AUTHOR, READER, RESTRICTED_AUTHOR, RESTRICTED_READER
    iam_arn: ENV['QUICK_SIGHT_ROLE_ARN'],
    session_name: self.user_email,
    aws_account_id: 'ENV['AWS_ACCOUNT_ID']',
    namespace: 'default'
    })
    rescue
    end
    options = {
    aws_account_id: ENV['AWS_ACCOUNT_ID'],
    dashboard_id: ENV['QUICK_SIGHT_DASHBOARD_ID'],
    identity_type: 'IAM',
    session_lifetime_in_minutes: 300,
    undo_redo_disabled: false,
    reset_disabled: false
    }
    qs_client.get_dashboard_embed_url(options).embed_url
    end
    
  • 转到管理QuickLight面板https://your-quicksight-region(us-east-2 for example).quicksight.aws.amazon.com/sn/admin#users并单击";管理权限"按钮(按钮放置在有用户的桌子上方(

  • 在新页面上点击";创建";按钮并选择";共享仪表板"复选框。设置权限的名称,点击";创建";按钮

  • 在控制器操作中:@url = fetch_url # fetch_url - method from 1 point

  • 添加到您的视图中:iframe src=@url您可以使用amazon quicksight嵌入sdk,但对我来说,iframe工作得很好

水下岩石

  • 请记住,仪表板url(使用此方法qs_client.get_dashboard_embed_url(options).embed_url获得(只能使用一次,即不能打开具有相同url的两个浏览器选项卡。当您将此URL传递给iframe时,此URL将停止工作,您将无法再在其他浏览器窗口或其他iframe

  • 将您的应用程序域添加到QuickLight上的白名单域中。您可以在"管理QuickLight"面板https://your-quicksight-region.quicksight.aws.amazon.com/sn/admin#embedding中执行此操作

  • !!!重要如果您试图将仪表板嵌入localhost:your_server_port_numberrails服务器,那么您将始终在iframe中获得错误消息(但如果您通过浏览器的地址栏访问此URL,那么您应该看到您的仪表板(注释掉/删除iframe,这样它就不会使用该链接,因为每个嵌入的仪表板URL都是一次性的(。这是因为白名单中没有提供localhost:your_server_port_number(Underwater rocks第2页(。为了解决这个问题并测试你的工作,你可以使用ngrok(也许它只适用于macOS,我不确定(。
    下载ngrok时,打开终端并运行命令
    $ ./path_to_ngrok_script/./ngrok http your_server_port_number
    对我来说:
    $ ~/./scripts/ngrok http 3000

    之后,做以下3件事,将您的工作站添加到QuickLight白名单:

  • 在具有ngrok的终端中,复制生成的域以https(我将其命名为ngrok_domain(,NOT WITH HTTP。对于示例:https://047956358355.ngrok.io

  • 转到水下岩石第2页并添加ngrok_domain

  • 打开浏览器并转到带有iframe的路径,但使用ngrok_domain而不是localhost:3000。例如,嵌入的仪表板路径为localhost:3000/embed_dashboard。更改为https://047956358355.ngrok.io/embed_dashboard



在完成所有这些步骤后,一切都开始为我工作。我确信这里的一些要点是多余的,但我真的厌倦了这种集成,所以在这里你自己决定应该留下什么和应该删除什么。
我希望我的回答至少能帮助到一些人

最新更新