Javascript 当我在浏览器上发出与《邮差》中完全相同的发帖请求时,我遗漏了什么';是什么让它失败?
在Postman中-我正在使用登录端点成功登录,之后,我执行了一个文件上载,该文件上载成功地使用下面的端点。id和文件路径成功存储在数据库中。我可以得出结论,在Postman中——在登录并仅附加一条表单数据(即正在上载的文件)后,id和电子邮件在Postman中显示正确的值。我可以确认它,因为如果我运行Javascript 当我在浏览器上发出与《邮差》中完全相同的发帖请求时,我遗漏了什么';是什么让它失败?,javascript,php,reactjs,laravel,debugging,Javascript,Php,Reactjs,Laravel,Debugging,在Postman中-我正在使用登录端点成功登录,之后,我执行了一个文件上载,该文件上载成功地使用下面的端点。id和文件路径成功存储在数据库中。我可以得出结论,在Postman中——在登录并仅附加一条表单数据(即正在上载的文件)后,id和电子邮件在Postman中显示正确的值。我可以确认它,因为如果我运行dd($id,$email),则返回正确的值。我没有像在前端代码中那样附加电子邮件和用户id 然而,在浏览器上-我试图发送用户id和电子邮件,但我在日志中不断收到500个错误,上面写着:“试图获取
dd($id,$email)代码>,则返回正确的值。我没有像在前端代码中那样附加电子邮件和用户id
然而,在浏览器上-我试图发送用户id和电子邮件,但我在日志中不断收到500个错误,上面写着:“试图获取非对象的属性'id'”
当我在浏览器上尝试时,我尝试使用访问令牌,希望它能检测出用户是谁,但这不起作用。我做错了什么
这是我的前端代码:
import React, {Component} from 'react';
import axios from 'axios';
class Upload extends Component {
constructor(props) {
super(props);
this.state = {
selectedFile: null,
id: null,
email: ''
};
this.onFormSubmit = this.onFormSubmit.bind(this);
this.onChange = this.onChange.bind(this);
this.fileUpload = this.fileUpload.bind(this);
}
componentDidMount() {
console.log("Inside componentDidMount()");
let id = localStorage.getItem("id");
let email = localStorage.getItem("email");
console.log(id);
console.log(email);
this.getId(id);
this.getEmail(email);
}
getId(id) {
console.log("inside getId()");
this.setState({id: id}, () => console.log(this.state.id));
}
getEmail(email) {
console.log("inside getEmail");
this.setState({email: email}, () => console.log(this.state.email));
}
onFormSubmit(e) {
e.preventDefault();
this.fileUpload(this.state.selectedFile);
}
onChange(e) {
this.setState({ selectedFile: e.target.files[0] });
}
fileUpload(file) {
const formData = new FormData();
const accessToken = localStorage.getItem("access_token").slice(13,-8);
console.log(accessToken);
console.log(this.state.id);
console.log(this.state.email);
formData.append('file', file);
axios.post('http://myendpoint/api/auth/dash', formData)
.then(response => {
console.log(response);
}).catch(error => {
console.log(error);
});
}
render() {
return (
<form encType='multipart/form-data' id="login-form" className="form" onSubmit={this.onFormSubmit}>
<input type="file" name="file" id="file" onChange={this.onChange}/>
<button type="submit">Upload</button>
</form>
);
}
}
export default Upload;
您不需要append()
表单数据对象上的id、电子邮件或accessToken。如果你不添加它们,它们就不会sent@PatrickEvans啊,好的,那么我该如何添加它们呢?这就是我一直被困的地方:(.我希望它被发送数据库可以知道哪个用户上传了文件与添加文件的方式相同,formData.append(“id”,This.state.id)
和其他值相同我想这就是“登录后只附加一条表单数据”的意思(这是正在上载的文件)id和电子邮件在Postman中显示正确的值。“我假设在提交此表单时,用户应该已经登录,并且电子邮件和id应该来自会话。正确吗?@Jordan是的!
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class FileUploadController extends Controller {
public function store(Request $request) {
$filePath = $request->file('file')->getClientOriginalName();
$id = $request->user()->id;
$email = $request->user()->email;
// dd($id, $email);
if (($user = Auth::user()) !== null) {
$data = [
'file_path' => $filePath,
'user_id' => $id,
'email' => $email
];
DB::table('my.db')->insert($data);
return response()->json($user);
}
return "failed";
}
}
public function login(Request $request) {
$request->validate([
'email' => 'required|string|email',
'password' => 'required|string',
'remember_me' => 'boolean'
]);
$credentials = request(['email', 'password']);
if(!Auth::attempt($credentials))
return response()->json([
'message' => 'Unauthorized'
], 401);
$user = $request->user();
$tokenResult = $user->createToken('Personal Access Token');
$token = $tokenResult->token;
if ($request->remember_me)
$token->expires_at = Carbon::now()->addWeeks(1);
$token->save();
return response()->json([
'access_token' => $tokenResult->accessToken,
'token_type' => 'Bearer',
'expires_at' => Carbon::parse(
$tokenResult->token->expires_at
)->toDateTimeString(),
$user
]);
}