登录后,我使用会话来设置用户详细信息。如果我使用postman,我可以获得会话的详细信息。如果我尝试从我的浏览器登录,它显示为空
这是我的控制器
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)));
}
}
config/session.php
'driver' => 'file',
编辑1作为参考,我使用laravel只进行api调用。因此,我的域将是api.mydomain.com/sessiondetails/activeuser
这就是问题所在吗?
编辑2
第一个对象是对会话get url的ajax调用,第二个对象是登录成功后的返回值。
两个令牌完全不同。
编辑-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'));
}
发布于 2021-02-27 16:48:55
首先_您必须在web路由中登录用户,而不是api。第二_如果您的会话在普通请求中工作,而不是在您的应用程序中工作,您可以使用cors中间件来发送跨平台请求,如下所示
Route::group(['middleware' => ['cors']], function()
{
Route::post('/auth/register',[UserApiController::class, 'register'] );
Route::post('/auth/login',[UserApiController::class, 'login'] );
Route::post('/auth/verify',[UserApiController::class, 'verify'] );
});
在laravel中,默认情况下不能使用cors中间件,但可以从此处安装npm包https://github.com/fruitcake/laravel-cors
https://stackoverflow.com/questions/34487807
复制相似问题