【发布时间】:2016-04-01 23:10:24
【问题描述】:
登录后,我使用会话设置用户详细信息。如果我使用邮递员,我可以获得会话详细信息。如果我尝试从浏览器登录,则显示为 null
这是我的控制器
namespace App\Http\Controllers;
use App\Models\User;
use Session;
class UserController extends Controller {
public function login(){
$postdata = file_get_contents("php://input");
$request = json_decode($postdata);
$requestArray = array();
foreach($request as $key => $value){
$requestArray[$key] = $value;
}
$user = User::login($requestArray);
Session::put("activeuser", $user);
Session::save();
return json_encode(array('result'=>Session::get("activeuser")));
}
控制器获取会话详细信息
namespace App\Http\Controllers;
use Session;
class ThisSessionController extends Controller {
public function getdetails($key)
{
return json_encode(array($key => Session::get($key)));
}
}
配置/session.php
'driver' => 'file',
编辑 1 作为一个信息点,我使用 laravel 只进行 api 调用。所以我的域将是 api.mydomain.com/sessiondetails/activeuser
这是问题吗?
编辑 2
第一个对象是ajax调用session获取url,第二个对象是登录成功后的返回值。
两个令牌完全不同。
编辑 - 3
我已经用 jwt 更新了 laravel,它抛出 JWT::Factory 不可用。下面是我更新的代码。
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use App\Http\Requests;
use JWTAuth;
use Tymon\JWTAuth\JWTManager as JWT;
use Tymon\JWTAuth\Exceptions\JWTException;
class UserController extends Controller {
public function login(Request $request){
$credentials = $request->only('username', 'password');
$user = User::login($requestArray);
if($user){
$payload = JWTFactory::make($credentials);
$token = JWTAuth::encode($payload);
}
return json_encode(array('result'=>$token));
}
编辑 - 4
我更改了登录函数中的代码,结果为
{"token":{}}
UserController@登录代码
$customClaims = ['foo' => 'bar', 'baz' => 'bob'];
$payload = app('tymon.jwt.payload.factory')->make($customClaims);
$token = JWTAuth::encode($payload);
编辑 5
我可以在 laravel 中生成令牌的最终工作代码是
public function login(Request $request){
$credentials = $request->only('username', 'password');
try {
$user = User::login($credentials);
if(!$user)
throw new Exception("Error Processing Request", 1);
} catch (Exception $e) {
return response()->json(['error' => false]);
}
$token = JWTAuth::fromUser($user);
return response()->json(compact('token'));
}
【问题讨论】:
-
如果我在同一页面中使用 Session::get 它会返回。如果我拨打另一个网址,我不明白
-
你检查 csrf_token 了吗?
-
两者不同。我会发照片
-
在您看到 Array[1] 的第二个对象中,试试这个 print_r(your_session_obj, true)。
-
它是一个 api 调用。它来自我设置会话的同一页面,userController@login .....数据正在填充。在研究中,我发现,每次我进行 api 调用时都会生成一个新会话。如何克服这一点。