это мой первый раз, работая с угловатыми и после большого количества времени, потраченного на онлайн-руководства и руководства, я в конечном итоге застрял в управлении сессиями. Everithing отлично работает, за исключением того, что при входе в систему переменная $_SESSION['uid']
содержит то, что я хочу, но это значение не анализируется обратно в $promise.then(function(response){...});
и поэтому я не могу начать сеанс должным образом. Не могли бы вы дать мне ключ?
Затем последовало следующее: Простая сессия с угловыми и php, angularJs
user.php
<?php
$json =file_get_contents('php://input');
$user=json_decode($json); //get user from JSON
if($user->mail=='[email protected]' && $user->pass=='1234')
session_start();
//$_SESSION['uid'] = uniqid('ang_');
$_SESSION['uid'] = $user->mail;
return $_SESSION['uid']; ?>
loginService.js
(function() {
'use strict';
var app = angular.module('loginS',['sessionS']);
app.factory('loginService',['$http','$location','sessionService',function($http,$location,sessionService){
return{
login:function(data,scope){
var $promise = $http.post('data/user.php', data);// send data to user.php
$promise.then(function(response){
console.log(response);
var uid = response.data;
if(uid!=""){
//scope.msgtext='Correct information';
sessionService.set('uid',uid);
$location.path('/home');
}
else{
scope.msgtext='Wrong information';
$location.path('/login');
}
});
},
logout:function(){
sessionService.destroy('uid');
$location.path('/login');
},
isLogged:function(){
var $checkSessionServer =$http.post('data/check_session.php');
return $checkSessionServer;
/*
if(sessionService.get('user')) return true;
else return false;
*/
}
}
}]);
})();
login.tmp.html
<div class="container">
<center>
<div class="bs-example text-left">
<form role="form" name="form1" >
<div class="form-group">
<p>Welcome : {{user.mail}} : {{user.pass}}</p>
<label for="exampleInputEmail1">Mail</label>
<input type="text" placeholder="Enrter name" class="form-control" id="exampleInputEmail1" required ng-model="user.mail"></input>
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" placeholder="Password" class="form-control" id="exampleInputPassword1" required ng-model="user.pass"></input>
</div>
<button class="btn btn-default" ng-disabled="form1.$invalid" ng-click="login(user)">Submit</button>
<p>{{msgtext}}</p>
</form>
</div>
</center>
Это то, что я получаю от обещания... Я не могу понять, почему...
console.log
Object {data: "", status: 200, config: Object, statusText: "OK"}
return
in php не выводит ничего в браузер... вам нужно использовать echo
.
кроме того, по умолчанию ожидаемый тип содержимого для $http
- json, поэтому я бы изменил:
return $_SESSION['uid'];
К чему-то вроде:
$output = array('uid'=>$_SESSION['uid']);
echo json_encode($output);
Тогда в угловом:
login:function(data,scope){
var $promise = $http.post('data/user.php', data);// send data to user.php
$promise.then(function(response){
console.log(response);
var uid = response.data.uid;
if(uid){
//scope.msgtext='Correct information';
sessionService.set('uid',uid);
$location.path('/home');
}
else{
scope.msgtext='Wrong information';
$location.path('/login');
}
});
},
После вашего ответа я пробовал это, потому что я понимаю его лучше, и он тоже работает.
Вместо:
$output = array('uid'=>$_SESSION['uid']);
echo json_encode($output);
Я использовал это:
$_SESSION['uid'] = $user->mail;
echo $_SESSION['uid'];
Итак, в Angular:
login:function(data,scope){
var $promise = $http.post('data/user.php', data);// send data to user.php
$promise.then(function(response){
console.log(response);
var uid = response.data;
if(uid!=""){
//scope.msgtext='Correct information';
sessionService.set('uid',uid);
$location.path('/home');
}
else{
scope.msgtext='Wrong information';
$location.path('/login');
}
});
}