未调用Passport身份验证回调

时间:2020-02-22 20:43:39

标签: node.js typescript passport.js passport-local

我对Passport的import pandas as pd from collections import namedtuple from datetime import timedelta Interval = namedtuple('Interval', 'field_name start_time end_time delta') class IntervalMatch(object): def __init__(self): pass def per_delta(self,interval: Interval, include_start: bool): current_interval = interval.start_time if not include_start: current_interval += pd.DateOffset(seconds=interval.delta) while current_interval < interval.end_time: yield current_interval current_interval += pd.DateOffset(seconds=interval.delta) def _copy(self, row, columns: pd.Index): values = pd.Series(row).values return pd.DataFrame([values], columns=columns.values).copy(True) def interval_split(self, interval: Interval, base_row: pd.Series, columns: pd.Index, include_start: bool): for time in self.per_delta(interval, include_start): extended_row = self._copy(base_row, columns) extended_row.at[(0, interval.field_name)] = time yield extended_row def get_exploded_records(self, data_to_examine: pd.DataFrame, time_field_name: str): last_row = None results = pd.DataFrame() delta = 1 # second time_col_index = data_to_examine.columns.get_loc(time_field_name) # process each row. It is possible there is a map/reduce/fluent way of doing this w/ Pandas intermediate_results = {} current_row = -1 for row in data_to_examine.itertuples(index=False): current_row += 1 if last_row is None: last_row = row intermediate_results[current_row] = row continue total_seconds = (row[time_col_index] - last_row[time_col_index]).total_seconds() if total_seconds > 1 and total_seconds < 100: # there is a gap, so we want to explode the gap into the data and fill it with last_row values. interval = Interval(time_field_name, last_row[time_col_index], row[time_col_index], delta) for intrvl in self.interval_split(interval, last_row, data_to_examine.columns, False): # we must unroll the list of rows to just the first row (since there is only one) intermediate_results[current_row] = intrvl.values[0] current_row += 1 # append the current row intermediate_results[current_row] = row last_row = row results = pd.DataFrame.from_dict(intermediate_results, orient='index') #, columns=data_to_examine.columns) return results def test(): print("Preparing Data") timestamps = ['2016-01-01 09:24:20', '2016-01-01 09:24:21', '2016-01-01 09:24:23', '2016-01-01 09:24:24', '2016-01-01 09:24:40'] data_with_gaps = pd.DataFrame({'timestamp':[pd.Timestamp(timestamp) for timestamp in timestamps], 'names':['Torial', 'Torial', 'Knut', 'Knut', 'Torial'], 'action':['Add','Edit','Add', 'Edit','Delete']}) interval = IntervalMatch() print("Getting Exploded Records") exploded = interval.get_exploded_records(data_with_gaps, 'timestamp') print(f"Data with Gaps: {data_with_gaps}") print(f"Exploded: {exploded}") exploded.to_csv("Exploded_test.csv") 方法有疑问。没有调用提供给该方法的回调。

代码如下:

authenticate

1 个答案:

答案 0 :(得分:0)

我错过了我基于代码的示例的关键部分。我不得不将import { Router, Request, Response, NextFunction } from 'express'; import jwt from 'jsonwebtoken'; import passport from 'passport'; // ... some stuff router.post('/login', (req: Request, res: Response, next: NextFunction) => { passport.authenticate('local', { session: false }, (err, user, info) => { // not reaching this part if (err) { return next(err); } if (err || !user) { return res.status(400).json({ message: info ? info.message : 'Login failed', user, }); } req.login(user, { session: false }, loginErr => { if (loginErr) { res.send(loginErr); } const token = jwt.sign(user, secrets.secret); return res.json({ user, token }); }); return res.status(500).send('Shouldn\'t come here'); }); }, (err: any, req: Request, res: Response, next: NextFunction) => { return res.status(err.status || 500).send(err.message) }); 用作中间件。因此,我使用passport.authenticate生成了一个函数,然后将passport.authenticatereqres传递给它,如下所示:

next

一切正常。