Я пытаюсь аутентифицировать пользователя, вошедшего в систему, но мои данные не попадают на сервер, поэтому я получаю ошибку, даже если я ввожу правильный адрес электронной почты и пароль
Это мой компонент,
import { Component } from '@angular/core';
import { Router, ROUTER_DIRECTIVES } from '@angular/router';
import { CORE_DIRECTIVES, FORM_DIRECTIVES } from '@angular/common';
import { Http, Headers } from '@angular/http';
import { contentHeaders } from '../headers/headers';
@Component({
directives: [ ROUTER_DIRECTIVES, CORE_DIRECTIVES, FORM_DIRECTIVES ],
templateUrl : "./components/login/login.html",
})
export class Login {
constructor(public router: Router, public http: Http) {
}
login(event, email, phone) {
event.preventDefault();
let body = JSON.stringify({ email, phone });
var headers = new Headers();this.http.post('http://localhost/angular/index.php/profile/logIn', body, {headers:headers})
.subscribe(
response => {
if(response.json().error_code ==0){
localStorage.setItem('social_id', response.json().id);
this.router.navigate(['/demo/profile']);
// console.log(body);
alert('hi');
}
else{
alert('fail');
}
},
error => {
alert(error.text());
console.log(error.text());
}
);
}
}
Мой шаблон,
<div class="login jumbotron center-block">
<h1>Login</h1>
<form role="form" (submit)="login($event, email.value, phone.value)">
<div class="form-group">
<label for="username">Username</label>
<input type="text" #email class="form-control" id="emailh" placeholder="Username">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" #phone class="form-control" id="phoneh" placeholder="Password">
</div>
<button type="submit" class="btn btn-default">Submit</button>
<a [routerLink]="['/signup']">Click here to Signup</a>
Я думаю, что я ошибся в заголовках, и я понятия не имею об этом, может кто-то указать, где ошибка ……
Код моего сервера (codeigniter)
<?php
header("Access-Control-Allow-Origin: *");
defined('BASEPATH') OR exit('No direct script access allowed');
class Profile extends CI_Controller
{
public function index()
{
$this->load->view('welcome_message');
}
public function logIn()
{
$email = $this->input->post('email');
$phone = $this->input->post('phone');
$this->load->model("Profile_Model");
$res = $this->Profile_Model->logIn($email, $phone);
if ($res) {
$message = array();
$message['error_code'] = 0;
$message['message'] = 'success';
$message['data'] = $res;
echo json_encode($message);
exit;
} else {
$message = array();
$message['error_code'] = 1;
$message['message'] = 'fail';
$message['data'] = new stdClass;
echo json_encode($message);
exit;
}
}
}
Я думаю, что вы пропустили, чтобы установить Content-Type
Заголовок в вашем коде:
let body = JSON.stringify({ email, phone });
var headers = new Headers();
headers.append('Content-Type', 'application/json');
this.http.post('http://localhost/angular/index.php/profile/logIn',
{ email, phone }, { headers })
(...)
Вы можете заметить, что из RC2, заголовок может быть установлен неявно на основе того, что предоставляется в качестве ввода. Например application/json
для объекта JSON, как описано ниже:
this.http.post('http://localhost/angular/index.php/profile/logIn',
{ email, phone })
(...)
Других решений пока нет …