小编And*_*rew的帖子

AngularJS - http拦截器 - 在令牌刷新后重新发送所有请求

我有一个角度应用程序,有时会为每个状态执行多个$ http.get请求.该应用程序使用JWT进行用户身份验证和刷新令牌.API服务器会发送401因auth错误而失败的每个请求.我做了一个http interceptor请求带有401错误的刷新令牌的新令牌,然后重新发送原始请求.

问题是,如果一个州例如2 $ http.get请求并且都得到401响应,那么我更新访问令牌两次.显然我只想刷新令牌一次,但我还是想重新发送两个失败的请求.

这是可以实现的,如果可以的话怎么样?

app.factory('AuthInterceptor', function($q, $injector, RESOURCE_URL, API_BASE, authService) {
    return {
        request: function(config) {
            config.headers = config.headers || {};
            if (authService.getAccessToken()) {
                if (config.url.substring(0, RESOURCE_URL.length) !== RESOURCE_URL) {
                    config.headers.Authorization = 'Bearer ' + authService.getAccessToken();
                }
            }
            return config;
        },
        responseError: function(response) {
            switch (response.status) {
                case 401:
                    var deferred = $q.defer();
                    $injector.get("$http").post(API_BASE + '/api/auth/refresh', {refreshtoken: authService.getRefreshToken()}).then(function(r) {
                        if (r.data.data.accesstoken && r.data.data.refreshtoken && r.data.data.expiresin) {
                            authService.setAccessToken(r.data.data.accesstoken);
                            authService.setRefreshToken(r.data.data.refreshtoken);
                            authService.setExpiresIn(r.data.data.expiresin);
                            $injector.get("$http")(response.config).then(function(resp) {
                                deferred.resolve(resp);
                            },function(resp) …
Run Code Online (Sandbox Code Playgroud)

angularjs

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

是否可以在不锁定整个 HashMap 的情况下在线程之间共享 HashMap?

我想在线程之间有一个共享的结构。该结构体有许多从未被修改的字段和 a HashMap,即。我不想HashMap为单个更新/删除锁定整个,所以我HashMap看起来像HashMap<u8, Mutex<u8>>. 这有效,但没有意义,因为无论如何线程都会锁定整个地图。

这是这个工作版本,没有线程;我认为这个例子没有必要。

use std::collections::HashMap;
use std::sync::{Arc, Mutex};

fn main() {
    let s = Arc::new(Mutex::new(S::new()));
    let z = s.clone();
    let _ = z.lock().unwrap();
}

struct S {
    x: HashMap<u8, Mutex<u8>>, // other non-mutable fields
}

impl S {
    pub fn new() -> S {
        S {
            x: HashMap::default(),
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

操场

这有可能吗?我在文档中遗漏了什么明显的东西吗?

我一直在努力让这个工作,但我不知道如何。基本上我看到的每个例子都有一个Mutex(或RwLock,或类似的东西)保护内在价值。

multithreading rust

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

在检查用户之前,AuthGuard不会等待身份验证完成

我在这里阅读了指南:https://angular.io/docs/ts/latest/guide/router.html

看起来非常简单,但是,我不确定如何在auth guard(canActivate)中使用angularfire2的身份验证.我试过的是:

AuthService

import { Injectable } from '@angular/core';
import { AngularFire } from 'angularfire2';

@Injectable()
export class AuthService {

  private user: any;

  constructor(private af: AngularFire) {
    this.af.auth.subscribe(user => {
      this.user = user;
    })
  }

  get authenticated(): boolean {
    return this.user ? true : false;
  }

}
Run Code Online (Sandbox Code Playgroud)

AuthGuard

@Injectable()
export class AuthGuard implements CanActivate {

  constructor(private router: Router, private authService: AuthService) { }

  canActivate(): Observable<boolean> | boolean {
    if (this.authService.authenticated)
      return true;

    this.router.navigate(['/login']);
    return …
Run Code Online (Sandbox Code Playgroud)

angularfire angular

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

Angular ui-router解析两次

这让我在过去几个小时里疯狂,我仍然无法找到解决方案......

基本上我将状态更改为何404时解析返回http 404状态代码.我正在改变状态$stateChangeError.一切正常,除非状态改变后,404它开始另一个状态改变回原来的状态,从而解决两次.状态本身仍然存在404,所以它毕竟是有效的,但它仍然会产生$http不需要的额外请求.但是,如果我使用$state.go('404', null, { location: false })OR,如果404状态根本没有定义URL ,它只会像这样工作.

如果我为404state(/404)定义了一个url ,那么一切正常.

这是2支钢笔,展示了这个问题:

失败的一个:http://codepen.io/cprfnaporf/pen/RaqmQN(调试模式,检查控制台:http://s.codepen.io/cprfnaporf/debug/RaqmQN/)

工作原理:http://codepen.io/cprfnaporf/pen/MyzdVQ(调试模式,检查控制台:http://s.codepen.io/cprfnaporf/debug/MyzdVQ/)

知道如何解决这个问题吗?我真的没有想法.

谢谢!

angularjs angular-ui-router

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

Firebase Facebook auth:电子邮件验证始终为false

如标题中所述,无论我如何尝试Facebook登录,该emailVerified字段始终为假.这是设计的吗?我现在已经阅读了整个firebase文档,似乎无法找到有关此内容的任何信息.只是为了确定:我尝试了4个不同的验证帐户,结果总是一样的.知道什么可能导致这种行为吗?

firebase firebase-authentication

8
推荐指数
3
解决办法
3096
查看次数

Angular 2,在@ ngrx/effects中捕获401

我有@ ngrx/store和效果正常,但是,我刚刚意识到会有很多API调用(在效果中),如果其中任何一个返回401错误,我应该将用户重定向到登录页面.我的问题是:我不想在每一个效果中都检查一下,这对同样的事情来说是一个额外的代码.比方说,我有一个像这样的代码:

样本效果

@Effect() getMe$ = this.actions$
    .ofType(GET_ME)
    .map(action => action.payload)
    .switchMap(payload => this.userService.me()
        .map(res => ({ type: GET_ME_SUCCESS, payload: res }))
        .catch(() => Observable.of({ type: GET_ME_FAILURE }))
    );
Run Code Online (Sandbox Code Playgroud)

userService.me()

me(): Observable<User> {
  return this.apiService.get(`/auth/me`);
}
Run Code Online (Sandbox Code Playgroud)

apiService.get()

get(endpoint: string): Observable<any> {
  return this.http.get(`${this.base}${endpoint}`, this.options())
    .map(res => res.json());
}
Run Code Online (Sandbox Code Playgroud)

这很好用,但我不知道如何在API返回401时处理这种情况.在这种情况下,我应该在哪里全局重定向用户?我应该为该案件制定行动吗?那我应该在哪里发送这个动作呢?或者我完全错了吗?

任何正确方向的帮助将不胜感激!

ngrx angular

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

Angular 2 - JWT auth

我正在使用RC1和新路由器(不是已弃用的路由器).

我已经阅读了大部分博客和文档,但我真的找不到一种惯用的方法,特别是没有使用"新"路由器.到目前为止,我的应用程序"完美"工作,只是缺少一些东西:

  1. 我应该如何Authorization每个 http请求上添加令牌到标头?(就像Angular 1.x中的拦截器一样)
  2. 我如何拦截任何40x响应,如果需要(意味着路由受到保护)导航到另一个URL?
  3. 如何设置路由(或组件),以便在用户未登录时应用程序将导航到登录URL?
  4. 额外奖励:在主要组件的contstructor中加载基本用户数据是不是惯用的?

我不需要一个完整的演示或类似的东西,只需要几个要点,我应该去.

angularjs angular2-routing angular

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

MongoDB 聚合 - 即使不存在 $group by date

我已经有一个查询,如下所示:

{$match:{
      "when":{$gt: new Date(ISODate().getTime() - 1000 * 60 * 60 * 24 * 30)}
}}, 
{$project:{
      "year":{$year:"$when"}, 
      "month":{$month:"$when"}, 
      "day": {$dayOfMonth:"$when"}
}}, 
{$group:{
      _id:{year:"$year", month:"$month", day:"$day"}, 
      "count":{$sum:1}
}},
{$sort:{
    _id: 1
}}
Run Code Online (Sandbox Code Playgroud)

结果如下所示:

{ "_id" : { "year" : 2015, "month" : 10, "day" : 19 }, "count" : 1 }
{ "_id" : { "year" : 2015, "month" : 10, "day" : 21 }, "count" : 2 }
Run Code Online (Sandbox Code Playgroud)

除了过去 30 天的结果,我怎么能以相同的格式获得结果,即使count是 0?

像这样:

{ "_id" : { …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

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

Angular 2路由器 - 使用angularfire2解析auth

我有一条路线,我想等到从firebase获取auth对象.这是我的代码:

路线

{
  path: 'random',
  component: RandomComponent,
  resolve: { auth: AuthService }
}
Run Code Online (Sandbox Code Playgroud)

AuthService

@Injectable()
export class AuthService implements Resolve<any> {

  constructor(private af: AngularFire) { }

  resolve(): Observable<any> {
    return this.af.auth.take(1);
  }

}
Run Code Online (Sandbox Code Playgroud)

RandomComponent

export class RandomComponent {

  constructor(private route: ActivatedRoute) {
    console.log(this.route.snapshot.data);
  }

}
Run Code Online (Sandbox Code Playgroud)

很奇怪它记录Object { },所以一个空对象.如果我将AuthService.resolve更改为return Observable.of('whatever'),那么它会记录Object { auth: "whatever" },所以我很确定这部分代码是有效的,只是因为某种原因,angularfire2 auth observable在这种情况下不起作用.(我真的不是一个可观察的专家,所以可能是我做错了什么).

如果我这样做,this.af.auth.take(1).subscribe(auth => console.log(auth));则记录auth对象,以便该部分也正常工作.

那是什么导致了这个问题呢?我究竟做错了什么?

(使用最新的路由器,angular2和angularfire2.)

angular2-routing angularfire2 angular

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

golang/mgo:从插入中省略空字段

由于某种原因mgo,即使我已经设置了omitempty选项,也将空结构插入到db as null值中.

package main

import (
    "fmt"
    "encoding/json"
)

type A struct {
    A bool
}

type B struct {
    X       int `json:"x,omitempty" bson:"x,omitempty"`
    SomeA   *A `json:"a,omitempty" bson:"a,omitempty"`
}

func main() {
    b := B{}
    b.X = 123

    if buf, err := json.MarshalIndent(&b, "", " "); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(string(buf))
    }
}
Run Code Online (Sandbox Code Playgroud)

json编码器省略了SomeA属性,但在数据库中它就像那样"a" : null.我做错了什么,或者根本不可能这样做?

go bson mgo

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

解组具有未知字段名称的JSON

我有一个JSON对象,如下所示:

{
    "randomstring": {
        "everything": "here",
        "is": "known"
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上randomstring对象内部的一切都是已知的,我可以对其进行建模,但是randomstring本身是随机的.我知道它会是什么,但每次都不一样.基本上我需要的所有数据都在randomstring对象中.我怎么能解析这种JSON来获取数据?

json go

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

mongo-go-driver 中的自定义 UnmarshalBSON

我希望有某种“钩子”,只要我从数据库中获取特定类型的对象,它就会运行。我认为该Unmarshaler接口非常适合此目的,但是...我如何实现该接口,而无需自己手动解组每个字段?

我想做这样的事情:

func (t *T) UnmarshalBSON(b []byte) error {
    // Simply unmarshal `b` into `t` like it would otherwise
    bson.Unmarshal(b, t) // Obviously this won't work, it'll be an infinite loop
    // Do something here
    return nil
}
Run Code Online (Sandbox Code Playgroud)

在不使用 Reflect pkg 手动解组字段的情况下,如何实现此目的?

go mongo-go

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