Angular/Node 验证用户

Posted

技术标签:

【中文标题】Angular/Node 验证用户【英文标题】:Angular/Node authenticate User 【发布时间】:2020-03-16 15:58:20 【问题描述】:

我有一个正在运行的节点服务器。并将帖子发送到 Twitter 时间轴,我有一个 Ionic/Angular 应用程序,它使用节点服务器并发送消息。

但是,问题是在节点服务器中,我的用户 Twitter 帐户信息是硬编码的,我想知道如何发送从 Twitter 连接插件获得的用户详细信息。

这是我的节点服务器

const express = require('express');
const Twitter = require('twit');

const app = express();
const client = new Twitter(
  consumer_key:         '...',
  consumer_secret:      '...',
  access_token:         '...',
  access_token_secret:  '...',
);


app.use(require('cors')());
app.use(require('body-parser').json());

app.post('/post_tweet', (req, res) => 

  tweet = req.body;

  client
    .post(`statuses/update`, tweet)
    .then(tweeting => 
      console.log(tweeting);

      res.send(tweeting);
    )

   .catch(error => 
    res.send(error);
  );


);

app.listen(3000, () => console.log('Server running'));

我的 angular/ionic 应用程序中的 Twitter 服务

export class TwitterserviceService 
  api_url = 'http://localhost:3000';

  constructor(private http: HttpClient)   

  tweet(tweetdata: string) 
    return this.http.post<any>(`$this.api_url/post_tweet/`, status: tweetdata)
        .pipe(map(tweet => 

            alert("tweet posted")

            return tweet;
        ));



这是我向节点服务器发送推文的角度代码

sendTweet()   
  this.api.tweet('sent from phone')
            .pipe(first())
            .subscribe(
                data => 
                    console.log('yes')
                ,
                error => 
                  'failed'
                );

连接插件

twitterLogin() 
    this.twitter.login().then((res: any) => 
      localStorage.setItem('twitterLogin', "true");
      this.firebaseService.twitterDetail(this.userId, res);


      this.twitterUser = true;
      if(this.twitterUser == true)
        this.twitter.showUser()
        .then(user => 
          console.log("User: " + user +
                        'username ' + res.username+ " " + user.username);

        );
      


    , (err: any) => 
      alert('error: ' + err);
    );
  

【问题讨论】:

你能举一个“硬编码”用户的例子吗? 最上面的代码是硬代码(我输入客户端密钥等)详细信息到我的节点服务器。这样当用户想要向 twitter 发布消息时。它将消息发布到用户的帐户,而不是已硬编码到节点服务器中的帐户 您需要用户授权代表他/她发帖。这通常需要 oauth 样式的身份验证。您的应用程序应在 Twitter 中注册。要执行授权,请参考以下过程 - developer.twitter.com/en/docs/basics/authentication/overview/… 该过程已在以下 URL 中进行了描述。检查应用程序用户身份验证部分developer.twitter.com/en/docs/basics/authentication/overview/… 【参考方案1】:

您需要在调用 API 服务时将参数设置为 AuthenticationHeaders,这将在 Angular 中实现 Interceptor 接口。

您可以参考HttpRequest with Interceptor in Angular

【讨论】:

以上是关于Angular/Node 验证用户的主要内容,如果未能解决你的问题,请参考以下文章

使用 Angular、node.js 和身份提供者的 SAML 身份验证

Angular、Node.js、MySQL 图片上传

Angular Node - 在打开新的浏览器窗口时向服务器发送令牌

Node、Angular、Express 和视图引擎

d3,Angular 2:node.getBoundingClientRect 不是函数

令牌拦截器不再发送原始请求(Angular、Node.js)