小编Eli*_*ard的帖子

使用redis存储在rails和node.js之间共享身份验证

我有一个rails应用程序和一个node.js应用程序,我使用Devise来验证用户.我将会话存储在Redis中.现在我想当用户转到节点应用程序时,应用程序通过socket.io检查用户是否已登录.我设法从redis获取会话数据,但我不知道如何解释它们以检查用户是否已登录.

这是节点应用程序的代码,它检查数据库中是否存在_session_id并检索会话数据:

io.set('authorization', function (data, accept) {
    if (data.headers.cookie) {
        data.cookie = cookie.parse(data.headers.cookie);
        data.sessionID = data.cookie['_session_id'];
        redis.get(data.sessionID, function (err, session) {
            if (err || !session) {
                accept('Error', false);
            } else {
                data.session = session;
                console.log(session);
                accept(null, true);
            }
        });
    } else {
       return accept('No cookie transmitted.', false);
    }
});
Run Code Online (Sandbox Code Playgroud)

这就是console.log(session)给我的东西:

{I"_csrf_token:EFI"1HPglfkCCagvb1LLraU1CEEyx7AtDzztqAEPY5G5lNgY=;FI"warden.user.user.key;TI"    User;F[iI""$2a$10$IHq2WAhwbaqR4WWajRE/Yu;T
Run Code Online (Sandbox Code Playgroud)

如何检查用户是否使用节点应用程序登录rails应用程序?谢谢

编辑:看来我使用的redis存储gem在将会话存储到数据库之前调用了一个编组方法.所以我通过覆盖编组方法并以JSON格式存储会话数据来绕过问题.这不是很优雅,所以如果你找到一个更好的方式来共享rails和node.js之间的会话,请告诉我.

authentication ruby-on-rails redis node.js devise

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

SVG解析和数据类型

我正在编写一个SVG解析器,主要是作为学习如何使用Parsec的练习.目前我使用以下数据类型来表示我的SVG文件:

data SVG = Element String [Attribute] [SVG]
         | SelfClosingTag [Attribute]
         | Body String
         | Comment String
         | XMLDecl String
Run Code Online (Sandbox Code Playgroud)

这很有效,但我不确定Element String [Attribute] [SVG]我的数据类型的部分.由于SVG 的潜在标签数量有限,我考虑使用类型来表示SVG元素而不是使用String.像这样的东西:

data SVG = Element TagName [Attribute] [SVG]
         | ...

data TagName = A
             | AltGlyph
             | AltGlyphDef
             ...
             | View
             | Vkern
Run Code Online (Sandbox Code Playgroud)

这是个好主意吗?如果有的话,这样做的好处是什么?有更优雅的解决方案吗?

parsing haskell types

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

如何编写 Serde 访问者将字符串数组转换为 Vec<Vec<f64>>?

我需要将 JSON 反序列化为具有Vec<Vec<f64>>字段的结构。JSON 有数字字符串,所以我需要一个自定义反序列化器来f64在反序列化过程中将字符串转换为。

我想反序列化的示例 JSON:

{
  "values": [["2", "1.4"], ["8.32", "1.5"]]
}
Run Code Online (Sandbox Code Playgroud)

我的结构是这样的:

#[derive(Deserialize)]
struct Payload {
    #[serde(default, deserialize_with = "from_array_of_arrays_of_strs")]
    values: Vec<Vec<f64>>,
}
Run Code Online (Sandbox Code Playgroud)

在 Serde 的示例中看到您可能可以对访问者执行此操作,因此我实现了此访问者:

fn from_array_of_arrays_of_strs<'de, T, D>(deserializer: D) -> Result<Vec<Vec<f64>>, D::Error>
where
    T: Deserialize<'de>,
    D: Deserializer<'de>,
{
    struct F64Visitor(PhantomData<fn() -> Vec<Vec<f64>>>);

    impl<'de> Visitor<'de> for F64Visitor {
        type Value = Vec<Vec<f64>>;

        fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
            formatter.write_str("a nonempty sequence of numbers")
        }

        #[inline]
        fn visit_str<E>(self, …
Run Code Online (Sandbox Code Playgroud)

serialization json rust serde

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

使用shared_ptr时出现分段错误

我正在制作一个粒子系统,我正在努力构建我的代码.这个想法是用户可以创建一个或多个ParticleEmitter通过ParticleManager对象传递给对象的ofxCurlNoise对象.

现在,我希望当用户更新ParticleEmitters对象时,ParticleManager对象会看到所做的更改.所以我使用了共享指针,但是我在不同的时间都有分段错误,无论是使用一个ParticleEmitter(程序启动时的分段错误)还是vector<ParticleEmitter>(程序退出时的分段错误).

这有什么问题?做我正在做的事情的设计模式是什么?

ofApp.h

#include "ofxCurlNoise.h"

class ofApp : public ofBaseApp{

    // ParticleEmitter particleEmitter;
    vector<ParticleEmitter> particleEmitters;
    ofxCurlNoise curlNoise;

    public:
        void setup();

};
Run Code Online (Sandbox Code Playgroud)

ofApp.cpp

#include "ofApp.h"

void ofApp::setup(){
    // This produces a segfault as soon as the program starts
    // particleEmitter.setup();
    // curlNoise.setup(particleEmitter, 1024*256);

    // This produces a segfault when the program exits
    ParticleEmitter emitter;
    emitter.setup();
    particleEmitters.push_back(emitter);
    curlNoise.setup(particleEmitters, 1024*256);    

}
Run Code Online (Sandbox Code Playgroud)

ofxCurlNoise.h

#include "ParticleManager.h"

class ofxCurlNoise {    

    ParticleManager …
Run Code Online (Sandbox Code Playgroud)

c++ design-patterns overloading shared-ptr c++11

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

惯用列表构建

我对Haskell和函数式编程很新,所以我真的不知道如何使这个代码成为惯用语:

type Coord = Double
data Point = Point Coord Coord Coord deriving Show

type Polyline = [Point]

-- Add a point to a polyline
addPoint :: Polyline -> Point -> Polyline
addPoint line p = p:line

line :: Polyline
line = []

constructLine :: Polyline -> Polyline
constructLine line =
    let 
        p1 = Point 2 4 87
        p2 = Point 3 7 2
        p3 = Point 23 4 8
    in addPoint (addPoint (addPoint line p1) p2) p3

main :: …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming list idiomatic

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

NightmareJS:如何设置cookie?


     var Nightmare = require('nightmare');
     var nightmare = Nightmare({
         show: true
     })


     nightmare
       .goto('https://mail.yandex.ru')
       .type('input[name=login]', 'mylogin')
       .type('input[name=passwd]', 'mypassword')
       .click('button.nb-button._nb-action-button.nb-group-start')
       .wait('.mail-User-Name')
       .cookies.get()
       .then(function (cookies) {
         //actions
       })

我在授权后获得cookie,但我不知道我必须在哪里设置它们以及我必须如何设置它们.我一开始就尝试过.cookie.set(),但这不起作用.

我如何使用保存的cookie?谢谢.

cookies node.js npm nightmare

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