小编Tsa*_*mba的帖子

.net表单身份验证 - 手动设置HttpContext.Current.User在自定义AuthorizeAttribute中不起作用

我已经打了好几个小时了,我很难过.我正在向MVC 5控制器发出ajax post请求,试图自动登录特定的预定义"超级"用户.在控制器方法中,我正在尝试以编程方式设置HttpContext.Current.User并进行身份验证,因此超级用户可以跳过手动登录的过程.对此的共识似乎就在这里,我实现了:

设置HttpContext.Current.User

这似乎有效,直到我尝试使用自定义AuthorizeAttribute查看任何其他控制器方法.

控制器方法:

[HttpPost]
[AllowAnonymous]
public ActionResult Login(string username)
{
    string password = ConfigurationManager.AppSettings["Pass"];

    User user = service.Login(username, password);

    var name = FormsAuthentication.FormsCookieName;
    var cookie = Response.Cookies[name]; 
    if (cookie != null)
    {   
        var ticket = FormsAuthentication.Decrypt(cookie.Value);
        if (ticket != null && !ticket.Expired)
        {
            string[] roles = (ticket.UserData as string ?? "").Split(',');
            System.Web.HttpContext.Current.User = new GenericPrincipal(new FormsIdentity(ticket), roles);
        }
    }

    //...processing result

    return Json(result);
}
Run Code Online (Sandbox Code Playgroud)

上面的service.Login方法创建cookie:

FormsAuthentication.SetAuthCookie(cookieValue, false);
Run Code Online (Sandbox Code Playgroud)

虽然我正在设置具有Identity和IsAuthenticated的User,但下面的filterContext.HttpContext.User不是同一个用户.它本质上是空的,好像从未分配过,并且未经过身份验证.

public override void OnAuthorization(AuthorizationContext filterContext) 
{
    string[] userDetails = …
Run Code Online (Sandbox Code Playgroud)

.net asp.net-mvc forms-authentication httpcontext

12
推荐指数
1
解决办法
2651
查看次数

Node 和 Express:如何实现基本的 webhook 服务器

我很难找到教程。我是 webhooks 的新手,除了对它们应该如何工作的一些基本描述之外,还没有使用或看过它们。

我们的用例是在有新记录时更新 API 的用户。由于我们正在使用 Kafka 并且已经确定了“最终一致性”,因此另一个用途可能是在无法从 Kafka 流中正确读取/写入记录时通知他们错误。

所以,据我所知,基本概念是:

const express = require("express");
const router = express.Router();

const processSomething = callback => {
    setTimeout(callback, 20000);
}

router.post("/hook", (req, res, next) => {
    processSomething(() => {
        res.status(200).send({
            id: "ABC123",
            message: "New record added!"
        });
    });
});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

这基本上是我拍摄的目的吗?用户是否会发布到此端点,等待响应,然后在收到响应后再次发布以重新订阅?长时间甚至无限期运行是否有问题?

我真的可以使用更复杂的例子,但我只是没有找到它们。您在谷歌搜索时发现的大部分内容都涉及集成第三方 webhooks,如 Github、Slack 等,而不是我需要构建的自定义。

我也不完全反对另一种方法。只是寻找通知 API 用户更新和其他重要信息的最佳方式。

javascript rest webhooks node.js express

12
推荐指数
1
解决办法
2万
查看次数

在 Node.js 中处理大型 CSV 上传

根据这里的先前线程:

节点异步循环 - 如何使此代码按顺序运行?

...我正在寻找有关处理大型数据上传文件的更广泛的建议。

设想:

用户上传了一个非常大的 CSV 文件,其中包含数十万到数百万行。它使用 multer 流式传输到端点:

const storage = multer.memoryStorage();
const upload = multer({ storage: storage });

router.post("/", upload.single("upload"), (req, res) => {
    //...
});
Run Code Online (Sandbox Code Playgroud)

每一行都被转换成一个 JSON 对象。然后将该对象映射到几个较小的对象中,这些对象需要插入到几个不同的表中,分布在各种微服务容器中并由其访问。

async.forEachOfSeries(data, (line, key, callback) => {
    let model = splitData(line);
    //save model.record1, model.record2, etc. sequentially
});
Run Code Online (Sandbox Code Playgroud)

很明显,使用这种方法我会遇到内存限制。这样做的最有效方式是什么?

javascript asynchronous node.js

7
推荐指数
1
解决办法
6264
查看次数

Identity Server 4 + Identity Framework + React前端

我正在寻找关于如何正确地将这样的环境放在一起的建议.有大量的信息和快速入门的大量资料,但经过3天的反复试验,我仍然感到相当失落.我熟悉.NET Framework中的Identity Framework,但在此之前从未使用过Identity Server.

我们有一个基于Node和MySql的微服务设置... Docker容器中的一系列服务,它们与MySql集群中自己的数据库节点通信.我们在React和Redux中构建了一个管理UI - 它将从AWS桶运行.

我的任务是使用Identity Server对此React前端进行身份验证.我们不会在API上使用它进行身份验证.我建议使用Identity Framework在.NET Core中构建身份验证UI,因为它为我们提供了"开箱即用"所需的一切.

最终,两个Identity应用程序将成为针对这些API编写的所有应用程序的SSO,甚至是那些不是这些API的应用程序.此外,我需要在某些时候加入AD,以允许内部公司用户通过w/o手动验证.

(我认为)我们需要的是以下内容:

  • Identity Server 4在其自己的容器中运行
  • 核心身份MVC应用程序在自己的容器中运行
  • 在前端使用oidc-client进行身份验证

我到目前为止所做的是遵循以下两个教程:

http://docs.identityserver.io/en/release/quickstarts/6_aspnet_identity.html#new-project-for-asp-net-identity

http://docs.identityserver.io/en/dev/quickstarts/7_javascript_client.html

我的结果是在同一个项目(两个不同的端口)中一起运行的运行的Identity Server和Identity Core MVC应用程序.在遵循JS客户端教程之后,我运行了他们的示例代码 - 它将我重定向到MVC登录,该登录对Identity进行身份验证然后,Server返回此结果:

{
  "sid": "8e60eb65960d967834cb3eb4fdcbbd49",
  "sub": "dfc90bd1-cad4-45d0-84bd-174e8a6ca891",
  "auth_time": 1516296631,
  "idp": "local",
  "amr": [
    "pwd"
  ],
  "preferred_username": "me@gmail.com",
  "name": "me@gmail.com"
}
Run Code Online (Sandbox Code Playgroud)

单击注销失败,但这是因为第一个教程中的控制器示例不包含用于注销的GET,例如隐藏在JavaScriptClient示例中的示例控制器.

感觉就像我到了某个地方,但与此同时,我现在完全意识到我知之甚少.可以使用建议,甚至只是指向正确的快速启动以实现我正在寻找的东西.

javascript reactjs asp.net-identity asp.net-core identityserver4

7
推荐指数
1
解决办法
6169
查看次数

React ErrorBoundary - 只是无法让它工作

抱歉,我知道有人问过这个问题,但我找不到适合我的例子。如果有这么多人为此苦苦挣扎,似乎不太容易理解。

我只需要知道如何以干净、简单的方式捕获 React 中的错误。我正在使用 CRA 2.0/React 16.7。我想要在操作级别有一个 try/catch 块,因为这是我的应用程序中业务逻辑集中的地方。

我读了这篇文章并按照描述实现了它,但我的 ErrorBoundary 对象从未捕获错误。

例子:

import React, { Component } from "react";

class ErrorBoundary extends Component {
    constructor(props) {
        super(props);
        this.state = { hasError: false };
    }

    static getDerivedStateFromError(error) {
        return { hasError: true };
    }

    componentDidCatch(error, info) {
        console.log("ErrorBoundary: ", error);
        console.log("ErrorBoundary: ", info);
    }

    render() {
        if (this.state.hasError) {
            return <h1>Something went wrong.</h1>;
        }
        return this.props.children;
    }
}

export default ErrorBoundary;
Run Code Online (Sandbox Code Playgroud)

我正在顶层包裹我的路线:

    return (
        <BrowserRouter>
            <ErrorBoundary>
                <div className="main-container">
                    <SideBar /> …
Run Code Online (Sandbox Code Playgroud)

javascript error-handling reactjs redux

7
推荐指数
1
解决办法
6272
查看次数

Node.js + Express - 无法连接.ERR_CONNECTION_REFUSED

我按照这个基本的例子:

http://shapeshed.com/creating-a-basic-site-with-node-and-express/

生成了文件......他们都在那里.我一步一步地运行它.无论我使用哪种浏览器,我都会收到"无法连接"(Firefox)和"此网页不可用... ERR_CONNECTION_REFUSED"(Chrome) - 它只是无法正常工作.我检查了生成的bin/www文件,它似乎表示端口3000.但是,当我在生成网站后运行"node app.js"时,我没有输出.在查看该文件后,我注意到它指向我系统上Node的错误路径,因此我将其更改为正确的路径:

#!/usr/local/bin/ node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('rwc:server');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

var port = parseInt(process.env.PORT, 10) || 3000;
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Event listener for HTTP …
Run Code Online (Sandbox Code Playgroud)

javascript node.js express

6
推荐指数
1
解决办法
2万
查看次数

AWS SDK 文件使用流 PassThrough 通过 Node/Express 上传到 S3 - 文件总是损坏

这很简单。使用此代码,上传的任何图像文件都已损坏且无法打开。PDF 看起来不错,但我注意到它正在将值注入基于文本的文件中。这是 s3 中正确的文件大小,而不是像出错一样为零。我不确定这是否是 Express、SDK 或两者组合的问题?是邮递员吗?我在今年 3 月的一个工作项目中构建了类似的东西,它完美无缺。我不再有权访问该代码进行比较。

没有错误,没有任何问题的迹象。

const aws = require("aws-sdk");
const stream = require("stream");
const express = require("express");
const router = express.Router();

const AWS_ACCESS_KEY_ID = "XXXXXXXXXXXXXXXXXXXX";
const AWS_SECRET_ACCESS_KEY = "superSecretAccessKey";
const BUCKET_NAME = "my-bucket";
const BUCKET_REGION = "us-east-1";

const s3 = new aws.S3({
    region: BUCKET_REGION,
    accessKeyId: AWS_ACCESS_KEY_ID,
    secretAccessKey: AWS_SECRET_ACCESS_KEY
});

const uploadStream = key => {
    let streamPass = new stream.PassThrough();
    let params = {
        Bucket: BUCKET_NAME,
        Key: key,
        Body: streamPass
    };
    let streamPromise = s3.upload(params, (err, …
Run Code Online (Sandbox Code Playgroud)

javascript amazon-s3 node.js express aws-sdk

5
推荐指数
1
解决办法
628
查看次数

DialogFragment的简单示例 - 示例代码对我不起作用

请原谅我的无知,这是我作为Android开发人员工作的第一周.虽然我有几年的Java,但我在Android世界中是一个完整的菜鸟.

我只是想创建一个对话框并显示它.从研究中,我发现这是首选的方法:

https://developer.android.com/guide/topics/ui/dialogs.html

所以,我走了那条路,一起拍了一个基本的例子,跑步时我得到一个例外:

09-11 11:57:28.914:E/AndroidRuntime(1217):致命异常:主09-11 11:57:28.914:E/AndroidRuntime(1217):进程:com.myapp.mobile,PID:1217 09-11 11:57:28.914:E/AndroidRuntime(1217):java.lang.RuntimeException:无法启动活动ComponentInfo {com.myapp.mobile/com.myapp.mobile.MainActivity}:java.lang.IllegalStateException:活动已被销毁09-11 11:57:28.914:E/AndroidRuntime(1217):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)09-11 11:57:28.914:E/AndroidRuntime(1217):在android. app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)09-11 11:57:28.914:E/AndroidRuntime(1217):at android.app.ActivityThread.access $ 800(ActivityThread.java:135)09-11 11:57 :28.914:E/AndroidRuntime(1217):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196)09-11 11:57:28.914:E/AndroidRuntime(1217):在android.os.Handler. dispatchMessage(Handler.java:102)09-11 11:57:28.914:E/AndroidRuntime(1217):在android.os.Loope r.loop(Looper.java:136)09-11 11:57:28.914:E/AndroidRuntime(1217):在android.app.ActivityThread.main(ActivityThread.java:5017)09-11 11:57:28.914: E/AndroidRuntime(1217):at java.lang.reflect.Method.invokeNative(Native Method)09-11 11:57:28.914:E/AndroidRuntime(1217):at java.lang.reflect.Method.invoke(Method. java:515)09-11 11:57:28.914:E/AndroidRuntime(1217):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)09-11 11:57:28.914: E/AndroidRuntime(1217):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)09-11 11:57:28.914:E/AndroidRuntime(1217):at dalvik.system.NativeStart.main (Native方法)09-11 11:57:28.914:E/AndroidRuntime(1217):引起:java.lang.IllegalStateException:活动已被破坏09-11 11:57:28.914:E/AndroidRuntime(1217):at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1345)09-11 11:57:28.914:E/AndroidRuntime(1217):在android.app.BackStackRecord.commitInternal(BackStackRecord.java:597)09-11 11:57:28.914:E/AndroidRuntime(1217):在android.app.BackStackRecord.commit(BackStackRecord.java:575)09-11 11:57:28.914:E/AndroidRuntime(1217):at android.app.DialogFragment.show(DialogFragment.java:230)09-11 11:57:28.914:E/AndroidRuntime(1217):at com.myapp.mobile.dialog.ActivationDialog.show(ActivationDialog.java:25)09 -11 11:57:28.914:E/AndroidRuntime(1217):at com.myapp.mobile.activate.Activation.ActivationCheck(Activation.java:11)09-11 11:57:28.914:E/AndroidRuntime(1217):在com.myapp.mobile.MainActivity.onCreate(MainActivity.java:20)09-11 11:57:28.914:E/AndroidRuntime(1217):at android.app.Activity.performCreate(Activity.java:5231)09- 11 11:57:28.914:E/AndroidRuntime(1217):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)09-11 11:57:28.914:E/AndroidRuntime(1217):在android.app. ActivityThread.performLaunchActivity(ActivityThread.java:2159)09-11 11:57:28.914:E/AndroidRuntime(1217):... 11更多

MainActivity的电话:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //check user activation
    ActivationDialog dialog = new …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-dialogfragment

4
推荐指数
1
解决办法
2万
查看次数

Redux Form:initialValues 不设置表单值

我只想在 redux-form 中设置和呈现表单的初始值。数据在 redux 中,我相信我的映射是正确的……但没有填充表单。该表单适用于插入,但现在我正在连接它以进行更新。

Redux 表单 7.2.0

形式:

...
<div className="form-group">
    <div className="col-md-2 control-label">Name</div>
    <div className="col-md-10">
        <Field 
            label="Name"
            name="app_cat_name" 
            component={input}
            validate={required} />
    </div>
</div>
<div className="form-group">
    <div className="col-md-2 control-label">Description</div>
    <div className="col-md-10">
        <Field 
            label="Description"
            name="app_cat_descr" 
            component={textArea}
            validate={required} />
    </div>
</div>
...
Run Code Online (Sandbox Code Playgroud)

mapStateToProps:

const mapStateToProps = state => {
    let values = { 
        initialValues: state.category
    };
    return values;
}
Run Code Online (Sandbox Code Playgroud)

...此时在调试时,“值”具有正确的对象并且 mapStateToProps 正在工作。

连线:

export default reduxForm({
    form: "CategoryForm",
    enableReinitialize: true
})(connect(mapStateToProps, { saveCategory, getCategories, getCategoriesCount })(CategoryForm));
Run Code Online (Sandbox Code Playgroud)

...无论有没有“enableReinitialize”,结果都是一样的。

我什至尝试将它传递到表单中,但结果相同 - 表单字段为空:

<form …
Run Code Online (Sandbox Code Playgroud)

reactjs redux redux-form

3
推荐指数
1
解决办法
2581
查看次数

了解 Cassandra - 它可以取代 RDBMS 吗?

上周我一直在 Cassandra 上死记硬背,试图了解基础知识,以及它是否适合我们的需求。我想我现在在基本层面上理解它,但如果它像我相信我被告知的那样工作......我只是不知道它是否合适。

我们有一个微服务平台,它本质上是我们客户之间的大型数据总线。他们使用一组 API 来推送和拉取共享数据。到目前为止,过滤非常简单……但无法知道未来会带来什么。

该平台的顶部是一个分析层,具有基于传递的数据的多个可视化(条形图、图形等)。

微服务平台建立在 MySQL 之上,其想法是我们可以使用集群,老实说,我们对此并不走运。最重要的是,变化是痛苦的,就像 RDBMS 世界中的课程一样。此外,我们预计会有大量数据和成千上万的并发用户 - 似乎我们将遇到不可避免的扩展问题。

因此,我们开始将 Cassandra 视为分布式 nosql 的潜在替代品。

我观看了 DataStax 视频,在另一个网站上学习了课程,然后开始深入研究。我发现的是:

  • 数据在多个表中冗余存储,每个表使用不同的主键和集群键,以启用不同类型的查询,因为行分散在集群中的不同节点上
  • 而不是加入,这是不支持的,你会反规范化并创建具有大量列的“宽”表
  • 数据最终是一致的,因此新的写入可能无法在可预测的合理时间内轻松读取。
  • CQL 虽然类似于 SQL,但主要是谎言。您存储和键控数据的方式决定了您可以使用哪些类型的查询。它似乎非常有限和不灵活。

虽然这些概念对我来说很有意义,但我正在努力了解这将如何满足大多数长期数据库需求。如果数据在几个不同的表中是冗余的……它是如何在这么多表中管理和保持一致的?在这种情况下,物化视图是答案吗?

喜欢这个想法并喜欢分布式功能,但坦率地说,在这一点上,我最害怕。我觉得我在上周学到了很多东西,但什么也没学到,我完全不确定如何继续。

我查看了 JanusGraph、Elassandra 等,看看它是否会在 Cassandra 之上提供一个更简单的界面,将其降级为基本上一个存储引擎,但我不确定这些东西中的许多是否足够成熟甚至合适,以满足我们的需要.

我想我正在寻找那些使用 Cassandra 构建东西的人的方向和洞察力,看看它是否适合我们正在做的事情。不幸的是,我的研发时间用完了。谢谢!

cql bigdata cassandra microservices

3
推荐指数
1
解决办法
655
查看次数

Node Express和csurf - 403(禁止)无效的csrf令牌

仔细观察并尝试了我在这里找到的所有东西,以及Googling在其他地方找到的东西......而我却无法超越这个.我正在使用Node,Express,EJS,并尝试在表单上使用csurf,这是使用jQuery ajax发布的.无论我如何配置csurf,我都会得到"403(Forbidden)无效的csrf令牌"

我尝试在app.js和控制器中全局配置.这是我在app.js中尝试的内容:

var express = require('express');
var session  = require('express-session');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var mysql = require('mysql');
var flash = require("connect-flash");
var csrf = require("csurf");

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(session({
    secret: 'somethingsecret',
    resave: true,
    saveUninitialized: true,
    httpOnly: true,
    secure: false
}));
app.use(csrf());
app.use(function (req, res, next) { …
Run Code Online (Sandbox Code Playgroud)

javascript ajax jquery node.js express

2
推荐指数
1
解决办法
4675
查看次数

节点异步循环 - 如何使此代码按顺序运行?

我知道有几篇关于这个的帖子,但根据我发现的那些,这应该可以正常工作。

我想在一个循环中发出一个 http 请求,并且我不希望循环在请求回调被触发之前进行迭代。我正在使用异步库,如下所示:

const async = require("async");
const request = require("request");

let data = [
    "Larry",
    "Curly",
    "Moe"
];

async.forEachOf(data, (result, idx, callback) => {
    console.log("Loop iterated", idx);
    let fullUri = "https://jsonplaceholder.typicode.com/posts";
    request({
        url: fullUri
    }, 
    (err, res, body) => {
        console.log("Request callback fired...");
        if (err || res.statusCode !== 200) return callback(err);
        console.log(result);
        callback();
    });
});
Run Code Online (Sandbox Code Playgroud)

我看到的是:

Loop iterated 0
Loop iterated 1
Loop iterated 2
Request callback fired...
Curly
Request callback fired...
Larry
Request callback fired...
Moe
Run Code Online (Sandbox Code Playgroud)

我需要看到的是: …

javascript asynchronous node.js

1
推荐指数
1
解决办法
3307
查看次数