我正在使用此repo在Rails中的2个用户之间创建聊天系统并对项目做出反应。我已经能够将用户输入记录到控制台中,并且我已根据repo创建了messages_controller和message_threads_controller。
但是,我无法将消息持久保存到rails db,然后在将用户发送给Pusher之前使用Pusher对用户进行身份验证。主要是因为在将消息发送到rails时,from_uid,to_uid和thread_uid不存在。 将消息发送到这样的rails:
sendMessage = (event) => {
event.preventDefault();
const {message} = this.state;
axios.post('/api/v1/messages', {message: message})
.then((response) => {
console.log(response);
})
console.log('send Message')
this.setState({'message': message});
console.log(this.state.message);
}
在我的routes.rb文件中,我有这个
resources :messages
get 'threads/:id', to: 'message_threads#index'
post '/pusher/auth', to: 'pusher#auth'
我缺少一些必需的参数,这是我得到的错误。
Pusher::Error - Bad request: Missing required parameter:
根据this tutorial的流程是,在将数据发送给Pusher之前,需要先由rails数据库保留该消息。
我现在的问题是如何生成the app here的React端使用的额外参数(from_uid,thread_uid,to_uid),以便创建消息?
另外,如何使用Pusher对用户进行身份验证?
根据这个stackoverflow link,他们从Rails得到这样的CSRF值 - csrf = $('meta[name=csrf-token]').attr('content')
但我无法在React中实现相同的功能。
我只需要澄清一下。任何帮助都感激不尽。感谢。
答案 0 :(得分:0)
git repo的作者回答。
我在这里创建的示例非常简单,但下面是一些要点,我希望将解释如何扩展它。
SecureRandom.uuid
生成ID)并将其保存到DB。这将成为您在javascript中公开的用户的ID,以允许用户之间的通信。所有用户都有UID。has_and_belongs_to_many
关系,以便最终跟踪订阅哪些主题的用户您也可能希望用户看到他们是新线程的一部分,而无需重新加载页面,因此我认为您只是想要通知用户新线程的Pusher频道订阅。所以我在创建新线程后在UserThreads模型中说你可以发送像Pusher.trigger('threads_channel', user_secret_uid, { thread: new_thread_uid })
这样的东西。您还需要在react应用程序中确保每个用户为其user_secret_uid订阅threads_channel。为了安全起见,我确保这是一个与消息传递不同的uid,否则人们可以订阅不同用户线程的列表。