我有一个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之间的会话,请告诉我.
我正在编写一个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)
这是个好主意吗?如果有的话,这样做的好处是什么?有更优雅的解决方案吗?
我需要将 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) 我正在制作一个粒子系统,我正在努力构建我的代码.这个想法是用户可以创建一个或多个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) 我对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)
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?谢谢.